Laravel, sync() - 如何同步数组并传递额外的透视字段?

2022-08-30 07:25:42

Laravel 官方文档具有以下功能:sync()

$user->roles()->sync( array( 1, 2, 3 ) );

您还可以将其他数据透视表值与给定的 ID 相关联:

$user->roles()->sync( array( 1 => array( 'expires' => true ) ) );

在后一个示例中,仅添加了一个透视行。我不明白的是,如果要同步的行不止一行,我该如何关联其他数据透视表记录?

提前致谢。


答案 1

为了获得多个模型以及自定义透视数据,您需要以下代码:sync

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

即。

sync([
    related_id => ['pivot_field' => value],
    ...
]);

编辑

回答评论:

$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);

答案 2

这对我有用

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

推荐