我有一个与此类似的表结构:
id name superpower 1 A speed 2 A stamina 3 B speed 4 C power 5 B power 6 D sarcasm
姓名与Superpower有一对多的关系。要编辑这些字段,前端表单将返回名称的超级电源数组。即,编辑A'表格可以返回['speed','power']
(去除耐力并增加力量)。
使用纯PHP执行此操作的简单方法是删除名称的所有超级大国并添加新的超级大国。 Laravel最好的办法是什么?
答案 0 :(得分:2)
所以你有一个用户模型(用于auth),一个Kid模型用于孩子们的细节,然后是Superpower模型用于超级大国的细节。
我看到了两个选项。选项一需要更大的结构变化,但更容易控制器逻辑,而另一个在控制器中更重。
与孩子和超级大国建立多对多的关系。如果用户可以添加可供所有其他用户查看的新超级大国,则这可能不适合您的用例。这将涉及一个枢轴表,它将存储一个孩子和一个超级大国之间的每个连接。
当返回一组超级大国链接到一个小孩(假设一个复选框列表正在表单中提交)时,你可以使用关系'sync
方法:
$kid->superpowers->sync($superpowers);
如果您希望保持关系的基本状态,我建议至少更改您在问题中建议的表格结构,以便name
字段为kid_id
。这将是更标准的,以便一个孩子与超级大国有一个hasMany关系,一个超级大国将有一个带孩子的belongsTo。
然后你可以打电话:
foreach ($request->superpowers as $superpower) {
$superpowers[] = ['superpower' => $superpower];
}
$kid->superpowers->delete();
$kid->superpowers->createMany($superpowers);
这种方法的明显缺点是首先要删除数据才能进行同步。生成的created_at
时间戳将不正确。