【问题标题】:Save HasMany and asscoiate BelongsTo in Eloquent在 Eloquent 中保存 HasMany 和关联 BelongsTo
【发布时间】:2021-11-01 06:26:22
【问题描述】:

表结构如下:

用户

  • 有很多页

页面

  • 属于用户
  • 有很多笔记

备注

  • 属于用户

我要创建一个笔记:

$note = new Note([
    'page_id': $this->page->id,
    'user_id': auth()->id(),
    'title': 'Foobar'
]);
$note->save();

简单。由于批量分配漏洞,我想避免在笔记模型的可填充内有外键。代码更改为:

$note = $this->page->notes()->create([
    'title': 'Foobar'
]);
$note->user()->associate(auth()->user());
$note->save();

模糊。为此,我必须在迁移中使注释的 user_id 可以为空。这感觉不对,因为没有用户,便条永远不应该存在。你会如何解决这个问题?

【问题讨论】:

  • 一个页面只能有1个用户,一个注释只能属于一个页面吗?看起来是使用 HasManyThrough 关系的好地方,其中用户通过页面有许多注释。 (使笔记属于页面而不是用户)

标签: laravel eloquent


【解决方案1】:

您可以这样做:

$note = new Note([
   'title' => 'your_title_here' //works if title is in the fillable attributes
]);
$note->page()->associate($this->page);
$note->user()->associate(auth()->user());
$note->save();

在这里,您不需要任何可为空的列,并且没有关于批量分配的风险。

另一个优势,当您首先执行create 然后另一个save 时,只有一个数据库查询而不是两个。

【讨论】:

    猜你喜欢
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多