具有相同ID但具有不同中间表值的数据透视表

时间:2016-07-21 00:13:31

标签: php mysql laravel eloquent laravel-5.2

Laravel文档说:

  

您还可以使用ID传递其他中间表值:   $ user-> roles() - > sync([1 => [' notes' => true],2,3]);

我想知道是否可以做这样的事情:

  

$ user-> roles() - > sync([1 => [' notes' => true],1 => [' notes' = > false]]);

我目前正在以略微不同的方式进行上述操作,而Laravel似乎只是用第二个条目覆盖数据透视表中的第一个条目,因此数据透视表看起来像这样:

user    role  notes
1       1     false

有没有办法使用sync()这样它会将两个值保存在数据透视表中,所以它看起来像这样?

user    role  notes
1       1     true
1       1     false

如果sync()不能为我这样做,是否有不同的方法来创建所需的结果?

1 个答案:

答案 0 :(得分:0)

您可以使用attach()代替:

$user->roles()->attach(1, ['notes' => true]);
$user->roles()->attach(1, ['notes' => false]);

如果要删除以前的值,可以在执行上述操作之前将sync()与空数组一起使用,如下所示:

$user->roles()->sync([]);
$user->roles()->attach(1, ['notes' => true]);
$user->roles()->attach(1, ['notes' => false]);

然后您将获得的结果将是DB中的所需结果:

user    role  notes
1       1     true
1       1     false