我有一个类似于这样的表结构:
id name superpower 1 A speed 2 A stamina 3 B speed 4 C power 5 B power 6 D 讽刺
Name 与 Superpower 是一对多的关系。要编辑这些字段,前端表单会返回名称的超能力数组。即,“编辑 A”形式可以返回['speed','power']
(去除耐力并增加力量)。
使用纯 PHP 执行此操作的一种简单方法是删除名称的所有超能力并添加新的超能力。在 Laravel 中执行此操作的最佳方法是什么?
所以你有一个用户模型(用于身份验证),一个用于孩子细节的 Kid 模型,然后是用于超级大国细节的 Superpower 模型。
我看到你有两个选择。选项一需要更大的结构变化,但更简单的控制器逻辑,而另一种在控制器中更重。
与孩子和超级大国建立多对多的关系。如果用户可以添加对所有其他用户可见的新超能力,这可能不适合您的用例。这将涉及一个数据透视表,该表将存储孩子和超级大国之间的每个联系。
当返回一组超能力以链接到孩子时(假设在表单中提交了一个复选框列表),您可以使用关系的sync
方法:
$kid->superpowers->sync($superpowers);
如果您想保持您的关系基本上保持原样,我建议至少更改您在问题中提出的表结构,以便该name
字段为kid_id
. 这将是更标准的,这样一个孩子就会与超能力有 hasMany 关系,并且超能力会与孩子有一个所属关系。
然后你可以调用:
foreach ($request->superpowers as $superpower) {
$superpowers[] = ['superpower' => $superpower];
}
$kid->superpowers->delete();
$kid->superpowers->createMany($superpowers);
这种方法的一个显着缺点是首先删除数据以进行同步。由此产生的created_at
时间戳将是不正确的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句