Том*_*раћ 54 php pivot sync laravel eloquent
官方Laravel文档具有以下sync()
功能:
$user->roles()->sync( array( 1, 2, 3 ) );
Run Code Online (Sandbox Code Playgroud)
您还可以将其他数据透视表值与给定ID相关联:
$user->roles()->sync( array( 1 => array( 'expires' => true ) ) );
Run Code Online (Sandbox Code Playgroud)
在后一示例中,仅添加了一个枢轴行.我不明白的是,如果要同步多行,如何关联其他数据透视表记录?
提前致谢.
Jar*_*zyk 114
要将sync
多个模型与自定义数据透视数据一起使用,您需要:
$user->roles()->sync( array(
1 => array( 'expires' => true ),
2 => array( 'expires' => false ),
...
));
Run Code Online (Sandbox Code Playgroud)
IE浏览器.
sync( array(
related_id => array( 'pivot_field' => value ),
...
));
Run Code Online (Sandbox Code Playgroud)
编辑
回答评论:
$speakers = (array) Input::get('speakers'); // related ids
$pivotData = array_fill(0, count($speakers), ['is_speaker' => true]);
$syncData = array_combine($speakers, $pivotData);
$user->roles()->sync($syncData);
Run Code Online (Sandbox Code Playgroud)
Rob*_*bin 25
->syncWithPivotValues($ids, $pivotValues)
如果您想为所有同步项目设置相同的主值,现在可以使用一种方法。
文档中的示例:
$user->roles()->syncWithPivotValues([1, 2, 3], ['active' => true]);
Run Code Online (Sandbox Code Playgroud)
The*_*ude 14
这适合我
foreach ($photos_array as $photo) {
//collect all inserted record IDs
$photo_id_array[$photo->id] = ['type' => 'Offence'];
}
//Insert into offence_photo table
$offence->photos()->sync($photo_id_array, false);//dont delete old entries = false
Run Code Online (Sandbox Code Playgroud)
安装/拆卸
Eloquent 还提供了一些额外的辅助方法,使使用相关模型更加方便。例如,假设一个用户可以有多个角色,一个角色可以有多个用户。要通过在连接模型的中间表中插入记录来将角色附加到用户,请使用 attach 方法:
$user = App\User::find(1);
$user->roles()->attach($roleId);
Run Code Online (Sandbox Code Playgroud)
将关系附加到模型时,您还可以传递要插入中间表的附加数据数组:
$user->roles()->attach($roleId, ['expires' => $expires]);
Run Code Online (Sandbox Code Playgroud)
如果您想删除旧角色并仅保留您现在附加的新角色,也可以使用同步
$user->roles()->sync([1 => ['expires' => $expires], 2 => ['expires' => $expires]);
Run Code Online (Sandbox Code Playgroud)
可以通过将“false”作为第二个参数传递来更改默认行为。这将附加 ID 为 1、2、3 的角色,而不会影响现有角色。
在这种模式下,sync 的行为类似于 attach 方法。
$user->roles()->sync([1 => ['expires' => $expires], 2 => ['expires' => $expires], false);
Run Code Online (Sandbox Code Playgroud)
参考:https : //laravel.com/docs/5.4/eloquent-relationships