2016-09-28 8 views
0

Как мы можем написать, если условие в Laravel Update QueryUpdate Query С Если в Laravel 5.3

Мой запрос является

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

Почему этот помеченный тегом Laravel 5.2, но 5.3 находится в заголовке вопроса? Что он? – ceejayoz

ответ

0

У вас есть несколько вариантов. Если вы хотите использовать красноречив, первый заставить пользователя:

$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:

$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

Просто, чтобы добавить к ответу @tptcat. Просто помните, что если вы используете необработанный запрос с помощью построителя запросов Laravel, он уязвим для SQL-инъекций.

+0

Как он уязвим для SQL-инъекций, когда запрос не использует ввод пользователя? Я бы хотел, чтобы люди постоянно бросали предупреждение о внедрении SQL в каждом вопросе о БД – bgies

Смежные вопросы