在 Laravel 中获取模型的关联以简化 creation/update

Fetch a Model's associations in Laravel to simplify creation/update

我有一个具有以下关联的电影模型 (belongsToMany):
演员
国家
类型 ...

发布表单时,我有以下数据(此处跳过很多细节):
'actors' => 数组(
'Cary Grant',
'Grace Kelly',
...
),
'genres' => 数组(
'Drama',
...
),
...

我希望我的 update()/store() 控制器函数能够轻松关联这些模型。

名字为 'Cary Grant' 的演员可能存在也可能不存在,也可能与我正在编辑的电影相关联也可能不相关联。我也可以将他从这部电影中删除,所以我需要删除关联。流派和其他一切都一样。

所以我想我会做一个 BaseModel 并且只在里面做一次所有这些,就像这样:
1. 获取电影模型的定义关联。
2. 检查 POST 数据是否包含这些关联。
3. 对于它们中的每一个,检查它们是否存在(如果不存在则创建它们)和 return 一个 id 数组。我正在检查的列是 'name',但它可以配置。
4.sync()那些ids。

目前,我不需要从电影形式(例如演员的生日)向相关模型添加更多内容。

我被困在 n.1($movie->getRelations() 仅适用于现有电影)并且通常我不确定这是否是正确的方法。提示?

我遇到了同样的问题,这就是我在我的项目中所做的:

  1. 我没有检索模型的所有已定义关系,而是将可以通过添加静态成员更新的关系列入白名单

    Movie::$editableRelations = ['actors', 'genres', 'countries'];

  2. 遍历 post 数据,并匹配 $editableRelations 数组。如果一个关系的数据存在,按照下面的步骤,否则我们根本不碰这个关系。

第 3 步和第 4 步与您的相同。

使用直接关系:$model->actors

http://laravel.com/docs/4.2/eloquent#relationships

所有 sync() 的东西都将由 ORM 完成,所以你应该做的最复杂的事情是 n.3。您必须在 $model->actors 和 $_POST['actors'] 之间创建差异并了解您需要插入哪些演员(创建新演员)。