Laravel 将数据透视表附加到具有多个值的表

标签 laravel laravel-4 eloquent pivot-table

背景

我正在创建一个围绕食物过敏的数据库,并且食物和过敏之间存在多对多的关系。还有一个称为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,如果这有帮助的话。

最佳答案

你可以。

从此文档中的示例( 4.25.0 ):

$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/

相关文章:

php - 如何获取多对多关系的id?

php - Laravel 保护列免受不可空/默认值的批量分配

php - 教义\DBAL\Driver\PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes")

php - Laravel 链接到路由未定义

php - 如何在 laravel 中使用 sql NOW( ) 函数

php - Laravel Eloquent 关系 - 表的多列引用相同的外键

php - Laravel:创建动态属性

javascript - 在 Laravel 中使用 Vue

php - 使用与 PDO 对象相同的句柄实例化 Laravel DB 对象

laravel - withTrashed 上的 hasManyThrough 关系