Laravel save()不是更新记录

时间:2016-08-13 08:19:35

标签: laravel laravel-5.2 laravel-5.1

如果记录已经存在,我正在尝试更新数据库表中的记录。如果记录不是数据库表,则插入新记录。

我在下面写了代码

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

当EnableQueryLog它始终显示插入查询时,如果记录已经在表中。

这是我的查询..

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()将记录插入数据库。

这段代码错在哪里? 我可以在桌子上使用唯一的密钥吗?

2 个答案:

答案 0 :(得分:1)

至少需要一个唯一列来查找或更新表记录

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

答案 1 :(得分:0)

还有另一种方法可以检查这个.update_at& created_at将由laravel default

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