![](/img/trans.png)
[英]How to properly update a model on laravel? Method Illuminate\Database\Eloquent\Collection::update does not exist
[英]laravel eloquent : How to update data if exist
我有一個表,其中有user_id
和role_id
。 現在,如果我從下拉列表中選擇user_id = 1,從下拉列表中選擇role_id = 2,然后保存它。下一次,如果我想設置同一用戶另一個角色,而不是在表中創建新行。 有人可以建議嗎?
$roleUser = RoleUser::firstOrNew(
['role_id' => $request->Input(['role_id']),
'user_id' =>$request->Input(['user_id'])] );
$roleUser->save();
我使用了firstOrNew方法,但它創建了一個新條目,而不是更新舊條目。
更新或創建新記錄時,我正在使用此源代碼。 與Laravel 5.2配合良好
如果存在一條記錄,則具有user_id
==您的user_id
=>將更新role_id
否則,將為您的user_id
再插入一條記錄
$roleUser = RoleUser::updateOrCreate([
'user_id' => $request['user_id'],
],
[
'role_id' => $request['role_id'],
]);
這是應該起作用的代碼。 但是,我不太了解您的數據庫體系結構選擇。 如果一個用戶只能有一個角色,為什么不在users
表中定義一個role_id
,然后使用belongsTo
關系呢?
$role_user = RoleUser::where('role_id',$request->get('role_id'))
->where('user_id',$request->get('user_id'))
->first();
if (is_null($role_user)) {
RoleUser::create([
'user_id' => $request->get('user_id'),
'role_id' => $request->get('role_id')
])
}
所以這里的問題在哪里?
您使用的是firstOrNew
方法,類似於firstOrCreate
通常執行以下操作:
從數據庫中選擇
如果不存在
插入給定數據
如果使用firstOrNew,則需要->save()
執行查詢。
因此,如果存在,它將不會更新您的數據。
但是,我認為您正在尋找updateOrCreate
方法,該方法updateOrCreate
兩個數組參數,第一個是插入的數據,如果存在,該函數將使用兩個數組參數來更新您的行。
您可能還會遇到想要更新現有模型或創建新模型(如果不存在)的情況。 Laravel提供了一個updateOrCreate方法來一步實現。 與firstOrCreate方法一樣,updateOrCreate可以持久化模型,因此無需調用save():
$roleUser = RoleUser::updateOrCreate(
// if not exists, insert the following RoleUser data
['role_id' => $request->Input(['role_id']),'user_id' =>$request->Input(['user_id'])],
// otherwise, update RoleUser set role_id = ?
['role_id' => $request->Input(['role_id'])]
);
$roleUser = RoleUser::firstOrNew(array('role_id' => Input::get('role_id'))); $roleUser ->save();
您可以添加多個字段。
例..
如果有從奧克蘭飛往聖地亞哥的航班,請將價格設置為$ 99。 如果不存在匹配的模型,請創建一個。
$flight = App\\Flight::updateOrCreate( ['departure' => 'Oakland', 'destination' => 'San Diego'], ['price' => 99] );
`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.