簡體   English   中英

laravel eloquent:如何更新數據(如果存在)

[英]laravel eloquent : How to update data if exist

我有一個表,其中有user_idrole_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM