创建具有多种关系的 eloquent 实例?

Posted

技术标签:

【中文标题】创建具有多种关系的 eloquent 实例?【英文标题】:Creating instance of eloquent with multiple relationships? 【发布时间】:2016-04-22 10:56:32 【问题描述】:

我有 3 个模型: 插件、评论和用户。

用户是插件的父级。在一对多的关系中,我可以轻松地创建一个与用户关联的插件:

$user->plugins()->create([...options...]);

但现在我的问题是:评论是用户和插件的孩子。如何在不手动设置一个 ID 的情况下使用 User 和 Plugin 创建评论?

【问题讨论】:

【参考方案1】:

假设一个评论属于一个用户和一个插件,你可以使用关系的associate()方法来设置外键。请注意,此方法仅在对象上设置适当的属性;您仍然需要save() 对象来更新数据库。

这是一个例子:

$plugin = $user->plugins()->create([...plugin options...]);

// instantiate a new review instance
$review = new \App\Review([...review options...]);

// set the user association
$review->user()->associate($user);

// set the plugin association
$review->plugin()->associate($plugin);

// save the entire record to the database
$review->save();

【讨论】:

工作,谢谢!这正是我正在寻找的:) 是否可以在创建时关联多个模型?我与外国人有 2 条关系,它们都不能为空,如果我尝试使用关联创建模型而不提供另一个相关记录 ID,则会出错。

以上是关于创建具有多种关系的 eloquent 实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试依赖于具有关系的 Eloquent 模型的类?

Laravel 5 - Eloquent:过滤多种关系的简单方法

Laravel Eloquent 关系方法语法

如何在 Laravel Eloquent 中构建具有多级关系的查询

在 ORM(Eloquent)中,具有 Genre 的 Book 是一对多关系吗?

如何通过 Eloquent 中具有多对多关系的外部表中的列聚合进行分组?