使用If在Laravel 5.3中更新查询

时间:2016-09-28 11:36:58

标签: laravel laravel-5.2

我们如何在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)

2 个答案:

答案 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注入的攻击。