массовое обновление таблицы [настроек] с разными значениями в Laravel - PullRequest
0 голосов
/ 25 августа 2018

Мне нужен более удобный способ обновления таблицы, такой как:

|name           |value
--------------------------------------
|cache_lifespan |240
|idle_time      |900
|jump_menu      |1
|listing        |25
|system_off     |1

Выше приведены значения настроек, у меня они есть в форме, и пользователь с привилегиями может их обновить.Я использую следующий метод внутри модели «Настройка» для обновления каждого значения настройки, но мне кажется, что это не идеальный способ сделать это.

public function updateSettings($fields)
{
    Setting::where('name', 'system_off')->update(['value' => $fields['system_off']]);
    Setting::where('name', 'listing')->update(['value' => $fields['listing']]);
    Setting::where('name', 'jump_menu')->update(['value' => $fields['jump_menu']]);
    Setting::where('name', 'cache_lifespan')->update(['value' => $fields['cache_lifespan']]);
    Setting::where('name', 'idle_time')->update(['value' => $fields['idle_time']]);

    cache()->forget('settings');

}

Я пытался найти способ обновить все настройки с помощьюодин запрос.

1 Ответ

0 голосов
/ 25 августа 2018

Поскольку вы пытаетесь обновить одну и ту же таблицу с другими критериями с другим значением, это невозможно.
Также вы пытаетесь обновить много элементов, и вы должны использовать транзакции.
Я могу предложить вам использовать этот код

$updatedColumns = ['system_off', 'listing', 'jump_menu', 'cache_lifespan', 'idle_time'];
DB::beginTransaction();
foreach ($updatedColumns as $column) {
    if (!Setting::where('name', $column)->update(['value' => $fields[$column]])) {
        DB::rollBack();        
    }
}
DB::commit();

если вы не используете транзакции, вы можете использовать этот код

$updatedColumns = ['system_off', 'listing', 'jump_menu', 'cache_lifespan', 'idle_time'];
foreach ($updatedColumns as $column) {
    Setting::where('name', $column)->update(['value' => $fields[$column]]);
}
...