當前revisionable
不支持多對多的關係。 但我解決了這個問題,下面的代碼:
/**
* Make revision and sync for many to many relations
*
* @param string $relation
* @param array $list
* @return array
*/
public function doSync($relation, $list)
{
$rel = $this->{$relation}();
$old = $rel->pluck('id')->implode(',');
$rel->sync($list);
$new = $rel->pluck('id')->implode(',');
storePivotRevision($this, $relation, $old, $new);
}
/**
* Store revision for pivot tables
*
* @param string $relation
* @param string $old
* @param string $new
* @return null
*/
function storePivotRevision($relation, $old, $new)
{
if ($old == $new) {
return;
}
DB::table('revisions')->insert([
'revisionable_type' => get_class($this),
'revisionable_id' => $model->id,
'user_id' => auth()->check() ? auth()->user()->id : null,
'key' => "{$relation}_pivot",
'old_value' => $old,
'new_value' => $new,
'created_at' => now(),
'updated_at' => now(),
]);
}
現在不是
$user->roles()->sync([1, 2, 3, ...]);
可以使用
$user->doSync('roles', [1, 2, 3, ...]);
的代碼一般寫的所有車型(沒有指定一個),所以你可以把它們放在一個trait
裏面,並且像這樣調用它:
$ model-> doSync('many_to_many_relation',$ listArray);
希望這有助於:)
同步功能應該設置新的列表。所以,如果你在公司表中有一個名稱字段,那麼你可以執行'$ user-> companies() - > pluck('name')'獲得新的公司名單。 – Sandeesh