在Laravel 5.3中使用If更新查询

在Laravel 5.3中使用If更新查询,laravel,laravel-5.2,Laravel,Laravel 5.2,如何在Laravel更新查询中编写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) 你有两个选择。如果要使用雄辩,请首先让用户: $user = User::find(2); 或者,如果id不是您的i

如何在Laravel更新查询中编写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)

你有两个选择。如果要使用雄辩,请首先让用户:

$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();
或者,即使这样也行(尽管在我看来,它看起来可能不那么干净):

另一个有趣的方法是使用

您也可以使用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;
");

只是为了补充@tptcat的答案。请记住,如果使用Laravel的查询生成器使用原始查询,它很容易受到SQL注入的攻击

为什么这个标签是Laravel 5.2,而你的问题标题是5.3?哪一个?当查询不使用用户输入时,它如何容易受到SQL注入的攻击?我希望人们不要在关于数据库的每一个问题上不断警告SQL注入
$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;
");