2017-05-29 97 views
0

我目前對Laravel v5.4.23使用Revisionable Package v1.28.0,這對於大多數情況來說是一對很棒的情侶。Laravel Revisionable - 跟蹤「表單輸入數組」

但是現在我在修改輸入數組時遇到了一些問題。輸入元素<input name="company_list[]">不是什麼大不了的事,但它對於可修改包是不可見的。所以沒有更改寫入數據庫。請求的dd()顯示輸入字段的內容。

"company_list" => array:3 [0 => "12", 1 => "10",2 => "2"] 

輸入數組將與用戶模型同步。

$user->companies()->sync($request->input('company_list',[])) 

有沒有辦法獲得更改並將ID轉換爲特定名稱?

非常感謝!

+0

同步功能應該設置新的列表。所以,如果你在公司表中有一個名稱字段,那麼你可以執行'$ user-> companies() - > pluck('name')'獲得新的公司名單。 – Sandeesh

回答

0

當前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);

希望這有助於:)