我们如何在Laravel Update Query中编写if条件
我的查询
UPDATE users SET user_counter = IF(user_counter=0,0,user_counter-1), user_live_counter = IF(user_live_counter=0,0,user_live_counter-1) WHERE user_id = 2(some id)
答案 0 :(得分:0)
你有几个选择。如果你想使用Eloquent,首先得到用户:
$user = User::find(2);
或者,如果id
不是您的ID列的名称:
$user = User::where('user_id', 2)->first();
然后更新:
$user->user_counter = $user->user_counter == 0 ? 0 : 1;
$user->user_live_counter = $user->user_live_counter == 0 ? 0 : 1;
$user->save();
或者甚至可以使用(虽然在我看来它可能看起来不干净):
$user->update([
'user_counter' => $user->user_counter == 0 ? 0 : 1,
'user_live_counter' => $user->user_live_counter == 0 ? 0 : 1,
]);
另一个有趣的方法是使用Eloquent's Mutators。
您也可以使用DB facade简单地编写原始查询:
$updatedUser = DB::statement("
UPDATE
users
SET
user_counter = CASE WHEN user_counter = 0 THEN 0 ELSE user_counter + 1 END,
user_live_counter = CASE WHEN user_live_counter = 0 THEN 0 ELSE user_live_counter + 1 END
WHERE
user_id = 2;
");
答案 1 :(得分:-1)
只是为了添加@tptcat的答案。请记住,如果您使用Laravel的查询构建器使用原始查询,则它很容易受到SQL注入的攻击。