Laravel使用多个值将轴附着到表 背景

Laravel使用多个值将轴附着到表 背景,laravel,laravel-4,eloquent,pivot-table,Laravel,Laravel 4,Eloquent,Pivot Table,我正在创建一个围绕食物过敏的数据库,我在食物和过敏之间有一个多对多的关系。还有一个称为严重程度的枢轴值,该值有一个数字,表示该食品过敏的严重程度 这个链接表如下所示 food_id|allergy_id|severity -------|----------|-------- 1 | 1 | 3 1 | 4 | 1 2 | 2 | 1 问题 尝试使用Eloquent更新链接表时(其中$alle

我正在创建一个围绕食物过敏的数据库,我在食物和过敏之间有一个多对多的关系。还有一个称为<代码>严重程度的枢轴值,该值有一个数字,表示该食品过敏的严重程度

这个链接表如下所示

food_id|allergy_id|severity
-------|----------|--------
     1 |        1 |      3
     1 |        4 |      1
     2 |        2 |      1
问题 尝试使用Eloquent更新链接表时(其中
$allergy\u ids
是一个数组)

如何将多个值与透视值一起一次添加到此透视表

我可以使用上一行一次添加特定食物项目的所有过敏id,但如何同时添加具有各种严重性值的
严重性
列?也许像

$food->allergies()->attach($allergy_ids, $severity_ids);

编辑:一种特定的食物可能有0-20种过敏,如果这有帮助的话,每种过敏的严重性等级可能在0-4之间。

你不能随心所欲,所以我建议一个简单的循环:

foreach ($allergy_ids as $key => $id)
{
  $food->allergies()->attach($id, array_get($severity_ids, $key));
  // should you need a sensible default pass it as a 3rd parameter to the array_get()
}
变通办法 但是,如果您想将多个过敏附加到一个严重级别/id,则可以执行以下操作:

$food->allergies()->attach($allergy_ids, array('severity' => $singleSeverityValue));
你可以

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

前两行的硬编码版本:

$food = Food::find(1);
$food->allergies()->sync([1 => ['severity' => 3], 4 => ['severity' => 1]]);
动态地,当您的阵列$U ID和$Severity处于兼容状态(大小和排序)时,您应该在之前准备同步数据。比如:

$sync_data = [];
for($i = 0; $i < count($allergy_ids); $i++))
    $sync_data[$allergy_ids[$i]] = ['severity' => $severities[$i]];

$food->allergies()->sync($sync_data);
$sync_data=[];
对于($i=0;$i$severity[$i]];
$food->allergies()->sync($sync_数据);

最简单的方法就是附加额外的数据,如下所示:

$retailer->paymentmethods()->attach($paymentmethod, array('currency' => $paymentmethod->currency));

更改食物过敏严重程度的值,但得到提示…:-)

从Laravel的5.1版(当前为Laravel 8.x)开始,可以将数组作为第二个参数传递,其中包含需要保存在中间表中的所有附加参数。 尽你所能

将关系附着到模型时,还可以传递要插入中间表的附加数据数组:

为方便起见,附加和分离也接受ID数组作为输入:

$user->roles()->attach([1 => ['expires' => $expires], 2, 3]);
然后你可以简单地做

$food->allergies()->attach([1 => ['severity' => 3], 4 => ['severity' => 1]]);

foreach($key=>id){$food->allergies()->attach([$id],'severity'=>array\u get($severity\u id,$key)];}这是我用来让它工作的代码的更新版本。原来
attach
方法希望将数组传递给它。非常感谢。你的意思是,如果不向数组施放$id,它对你来说就不起作用了?这不应该是一个问题,因为attach方法无论如何都会将其强制转换为数组。@JarekTkaczyk就是这样做的<代码>=>
,我的问题是我用了一个逗号:-p你解决了我的问题了吗@Nuno Rafael Figueiredo这对我有用吗me@sanu. 我很高兴,但你不应该支持我的答案吗?也适用于
附件
。注意!!!使用sync将删除
$sync_data
中不存在的所有数据,并添加表中不存在的数据。它相当于
detach()
然后
attach()
。注意:完全相等,但关闭,因为现有记录不会首先分离。接受此作为答案,因为有更多的向上投票,并且似乎比2年前的旧答案更相关。我只想将{}添加到$sync_data=[];对于($i=0;$i$severity[$i]];$food->allergies()->sync($sync_-data);}
$user->roles()->attach($roleId, ['expires' => $expires]);
$user->roles()->attach([1 => ['expires' => $expires], 2, 3]);
$food->allergies()->attach([1 => ['severity' => 3], 4 => ['severity' => 1]]);