将相同的外键添加到 4 行 Laravel
Posted
技术标签:
【中文标题】将相同的外键添加到 4 行 Laravel【英文标题】:Add the same foreign key to 4 rows Laravel 【发布时间】:2021-08-13 00:08:44 【问题描述】:我正在使用 Laravel 迁移在 phpMyAdmin 中创建表。我想做的一件事是有一个问题表和答案表,其中 1 个问题可以有 4 个答案(多项选择)。我想将答案和问题与关系联系起来。
是否可以在 Laravel 中设置主键/外键,以便每次创建新的问题行时,问题连接两个 4 答案(创建时)? 这些行将手动填充,但需要链接。
这可能吗?如果可以,我将不胜感激。
提前谢谢你。
【问题讨论】:
【参考方案1】:是的,这是可能的,方法如下
在答案的文件迁移中,您可以添加unsignedBigInteger(question_id)
。
在模型Question
你可以添加
public function answers()return $this->hasMany(Answer::class)
在创建答案时,您可以传入与该答案相关的请求question_id
这是你的要求还是我误解了?
【讨论】:
【参考方案2】:是的,一种常见的方法是订阅Question
模型的created
事件。有几种方法可以做到这一点,但我通常要么在模型本身中注册 booted()
上的侦听器,要么使用 Observers,如果我有很多事件订阅正在进行并希望它更有条理。
您可以像这样在模型中注册created
侦听器:
<?php
namespace App\Models;
use App\Models\Answer;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Question extends Model
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted()
static::created(
function ($question)
// This closure will be executed every time
// a new Question instance has been created
$question->Answers()->createMany(
[
['sort' => 1],
['sort' => 2],
['sort' => 3],
['sort' => 4],
]
);
);
/**
* A Question has many Answers.
*
* @return HasMany
*/
public function Answers(): HasMany
return $this->hasMany(Answer::class)->orderBy('sort');
在此示例中,我假设您的架构中有一个 sort
列,仅用于演示目的。如果您不想在新的 Answer
实例上预填充任何列,您当然可以只传入空数组 ([]
)。
您可以在文档中阅读更多相关信息:https://laravel.com/docs/8.x/eloquent#events
【讨论】:
以上是关于将相同的外键添加到 4 行 Laravel的主要内容,如果未能解决你的问题,请参考以下文章
如何将项目添加到具有Android Room中父实体的外键引用的子实体?