在Laravel中获取Model的关联以简化创建/更新

时间:2015-05-14 14:28:19

标签: php laravel orm sync

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

发布表单时,我有这些数据(在此处跳过很多细节):
'actors'=>阵列(
    '加里格兰特',
    'Grace Kelly',
    ...
),
'genres'=>阵列(
    '戏剧',
    ...
),
......

我希望我的update()/ store()控制器功能可以轻松地关联这些模型。

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

所以我以为我会做一个BaseModel并且只在那里做一次,就像这样:
1.获取电影模型定义的关联 2.检查POST数据是否包含这些关联 3.对于它们中的每一个,检查它们是否存在(如果不存在)并返回一组id。我正在检查的列是“名称”,但它可以配置 4. sync()那些id。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

  2. 遍历帖子数据,并与$editableRelations数组匹配。如果存在关系数据,请遵循以下步骤,否则我们根本不接触这种关系。

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