一尘不染

Laravel,sync()-如何同步数组并传递其他数据透视字段?

php

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

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

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

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

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

提前致谢。


阅读 429

收藏
2020-05-26

共1个答案

一尘不染

为了sync与自定义数据透视表一起使用多个模型,您需要:

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

就是

sync( array( 
    related_id => array( '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);
2020-05-26