2017-04-26 20 views
0

我正在使用存儲hasMany關係數據的角色包。因此,有一個users表和user_roles表的外鍵...等等...Laravel在更新後包含與模型的關係

我使用下面的代碼更新模型:

$user = User::findOrFail($id); 
    $user->update(request()->all()); 
    $user->syncRoles(request()->input('roles', [])); 

有什麼辦法,我可以保持一個參考roles關於$user變量,所以它們可以在這些代碼行運行後使用?

我這麼問是因爲我使用的是日誌系統的事實,像這樣經過:

activity()->on($user)->by(auth()->user())->withProperties([ 
     'user' => $user, 
     'roles' => request()->input('roles'), 
    ])->log('Updated User'); 

,我想只是凝結:

activity()->on($user)->by(auth()->user())->withProperties($user)->log('Updated User'); 
+0

不確定你的意思是讓它們保持在同一個變量中。 – lagbox

+0

您將需要刷新模型。看看Eloquent模型中的'fresh()'函數。 – fubar

回答

1

您需要從數據庫中刷新模型數據。例如。

$user = $user->fresh('roles'); 
0

例如使用延遲加載:

$user = User::findOrFail($id); 
$roles = $user->roles; 

,並在你的User模型,你將創建一個HasMany與角色表的關係。

預先加載:

$user = User::with('roles')->findOrFail($id); 
+0

我更新了OP .....是否有可能將它們都保存在同一個變量中? – kjdion84

+0

@ kjdion84看到我的更新 – meda

0

添加的關係,你的user.php的模式:

public function roles(){ 
    return $this->hasMany(Role::class); 
} 

現在只需調用它在你的代碼來獲取角色,像這樣:

$aUser = User::with('roles')->find($id); 
$roles = $aUser->roles;