2016-08-13 88 views
0

我想更新數據庫表中的記錄,如果記錄已經存在。如果記錄不在數據庫表中,則插入新記錄。Laravel save()不是更新記錄

我已經EnableQueryLog它總是顯示插入查詢,如果記錄已經在表中寫時,下面的代碼爲

DB::enableQueryLog(); 
      $user->userCommission()->save(new UserCommission($input['commission'])); 
      dd(DB::getQueryLog()); 

這裏是我的查詢..

array:1 [▼ 
    0 => array:3 [▼ 
    "query" => "insert into `user_commissions` (`created_by`, `status_id`, `percent`, `user_id`, `updated_at`, `created_at`) values (?, ?, ?, ?, ?, ?)" 
    "bindings" => array:6 [▼ 
     0 => "1" 
     1 => "1" 
     2 => "0.10" 
     3 => 21 
     4 => "2016-08-13 08:07:45" 
     5 => "2016-08-13 08:07:45" 
    ] 
    "time" => 2.57 
    ] 
] 

在上面查詢user_id說明21的記錄已經在表中雖然Save()插入記錄到數據庫中。

我在哪裏錯了這段代碼? 我可以將唯一的密鑰應用於表格嗎?

回答

1

至少需要一個唯一的列找到或更新表記錄

$userCommission = UserCommission::firstOrNew(array('created_by' => 1)); 
$userCommission->status_id = 1; 
$user()->userCommission()->save($userCommission); 
0

有一種另類的一種方式一步檢查this.update_at & created_at將laravel默認插入

userCommission::updateOrCreate([ 
           'user_id' => 21 
           ],[ 
           'created_by' => 1, 
           'status_id' => 1, 
           'percent' => "0.10", 
           'user_id' => 21, 
          ]);