2016-08-13 375 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, 
          ]);