背景
我正在创建一个围绕食物过敏的数据库,并且食物和过敏之间存在多对多的关系。还有一个称为severity
的主值,它有一个代表该食品过敏严重程度的数字。
这个链接表看起来像这样;
food_id|allergy_id|severity
-------|----------|--------
1 | 1 | 3
1 | 4 | 1
2 | 2 | 1
问题
尝试使用 Eloquent 更新链接表时(其中 $allergy_ids
是一个数组)
$food->allergies()->attach($allergy_ids);
如何将多个值与数据透视值一起一次性添加到该数据透视表中?
我可以使用上述行一次性添加特定食品的所有 allergy_id
,但是我如何才能在 severity
列中添加同时具有一系列不同严重性值?也许类似
$food->allergies()->attach($allergy_ids, $severity_ids);
编辑:对特定食物可能有 0-20 种过敏,每种过敏的严重程度为 0-4,如果这有帮助的话。
最佳答案
你可以。
$user->roles()->sync(array(1 => array('expires' => true)));
前两行的硬编码版本:
$food = Food::find(1);
$food->allergies()->sync([1 => ['severity' => 3], 4 => ['severity' => 1]]);
动态地,当您的数组 $allergy_ids 和 $severities 处于兼容状态(大小和排序)时,您应该先准备同步数据。像这样的东西:
$sync_data = [];
for($i = 0; $i < count($allergy_ids); $i++))
$sync_data[$allergy_ids[$i]] = ['severity' => $severities[$i]];
$food->allergies()->sync($sync_data);
关于Laravel 将数据透视表附加到具有多个值的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226802/