我有一个具有以下关联的电影模型(belongsToMany):
演员
国家
类型
...
发布表单时,我有这些数据(在此处跳过很多细节):
'actors'=>阵列(
'加里格兰特',
'Grace Kelly',
...
),
'genres'=>阵列(
'戏剧',
...
),
......
我希望我的update()/ store()控制器功能可以轻松地关联这些模型。
名为'Cary Grant'的演员可能存在也可能不存在,可能已经或可能没有与我正在编辑的电影相关联。我也可以将他从这部电影中删除,所以我需要删除该关联。与流派和其他一切相同。
所以我以为我会做一个BaseModel并且只在那里做一次,就像这样:
1.获取电影模型定义的关联
2.检查POST数据是否包含这些关联
3.对于它们中的每一个,检查它们是否存在(如果不存在)并返回一组id。我正在检查的列是“名称”,但它可以配置
4. sync()那些id。
目前,我不需要从电影表格中添加更多内容到相关模型中(例如演员的生日)。
我被困在n.1($ movie-> getRelations()仅适用于现有电影),一般来说我不确定这是否是正确的方法。提示?
答案 0 :(得分:1)
使用直接关系:$ model-> actors
http://laravel.com/docs/4.2/eloquent#relationships
所有sync()内容都将由ORM完成,因此您应该做的最复杂的事情是n.3。你必须在$ model-> actors和$ _POST ['actors']之间创建差异,并了解你需要插入哪些actor(创建新的actor)。
答案 1 :(得分:0)
我遇到了同样的问题,这就是我在项目中所做的事情:
我没有检索所有已定义的模型关系,而是通过添加静态成员来更新可以更新的关系
Movie::$editableRelations = ['actors', 'genres', 'countries'];
遍历帖子数据,并与$editableRelations
数组匹配。如果存在关系数据,请遵循以下步骤,否则我们根本不接触这种关系。
第3步和第4步与您的相同。