Laravel DB :: таблица обновлена - PullRequest
0 голосов
/ 18 октября 2018

У меня есть этот запрос

DB::table('pro_orders_has_passengers')
        ->where('title_name','MR.')
        ->update([
            'title_name' => 'mr',
    ]);
    DB::table('pro_orders_has_passengers')
        ->where('title_name','MRS.')
        ->update([
            'title_name' => 'mrs',
    ]);
    DB::table('pro_orders_has_passengers')
        ->where('title_name','Miss')
        ->update([
            'title_name' => 'ms',
    ]);
    DB::table('pro_orders_has_passengers')
        ->where('title_name','Girl')
        ->update([
            'title_name' => 'girl',
    ]);
    DB::table('pro_orders_has_passengers')
        ->where('title_name','Boy')
        ->update([
            'title_name' => 'boy',
    ]);

Я получил правильный результат. Но я хочу этот результат в одном запросе.как то так

 $titlename = ['MR.','MRS.','Miss','Girl','Boy'];

    DB::table('pro_orders_has_passengers')
        ->where('title_name',$titlename)
        ->update([
            ........
    ]);

Как мне это сделать?Спасибо вам ответ.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Я предполагаю, что таким образом вы можете достичь того, что ищете

$titlename = ['MR.','MRS.','Miss','Girl','Boy'];
for($i=0; $i < count($titlename);$i++) {
DB::table('pro_orders_has_passengers')
            ->where('title_name',$titlename[$i])
            ->update(['title_name' => strtolower(str_replace('.', '' , $titlename[$i]))]);
}

Или с циклом foreach, для улучшения читабельности кода:

$titlenames = ['MR.','MRS.','Miss','Girl','Boy'];
foreach($titlenames as $titlename) {
DB::table('pro_orders_has_passengers')
            ->where('title_name',$titlename)
            ->update(['title_name' => strtolower(str_replace('.', '' , $titlename))]);
}
0 голосов
/ 18 октября 2018

Попробуйте это.Для получения дополнительной информации перейдите по ссылкам

1. Я хочу использовать оператор CASE для обновления некоторых записей в sql server 2005

2. Запуск общего заявления: https://laravel.com/docs/5.7/database

DB::statement(
      UPDATE pro_orders_has_passengers
      SET title_name = CASE  
                    WHEN title_name = 'Mr.' THEN 'mr' 
                    WHEN title_name = 'Mrs.' THEN 'mrs' 
                    //-------Others cases-----//
                    ELSE LASTNAME
                END 
      WHERE title_name IN ('Mr.', 'Mrs.', .....)
);
0 голосов
/ 18 октября 2018
    $titlename = ['mr' => 'MR.','mrs' => 'MRS.','ms' => 'Miss','girl' => 'Girl', 'boy' => 'Boy'];

    $update_query = "UPDATE pro_orders_has_passengers SET title_name = CASE";
    foreach ($titlename  as $new_title => $title) {
       $update_query = $update_query . " WHEN title_name = '$title'  THEN  '$new_title'";
    }
    $update_query = $update_query . " END WHERE title_name IN ('".implode(array_values($titlename), '\',\'')."')";
    \DB::statement($update_query);

Попробуйте так.Это поможет вам выполнить массовое обновление.

Окончательный результат будет

ОБНОВЛЕНИЕ pro_orders_has_passengers SET title_name = CASE WHEN title_name = 'MR.'ТОГДА г-н КОГДА title_name = 'MRS.'THEN 'mrs' WHEN title_name = 'Miss' THEN 'ms' WHEN title_name = 'Girl' THEN 'girl' WHEN title_name = 'Boy' THEN 'boy' ГДЕ КОНЕЦ title_name IN ('MR.', 'MRS.', 'Miss ',' Girl ',' Boy ')

...