массовое обновление таблицы [настройки] с различными значениями в Laravel

Я хочу улучшить способ обновления таблицы, например:

|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');

}

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

php,mysql,laravel,laravel-query-builder,

1

Ответов: 1


1

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

$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]]);
}
PHP, MySQL, Laravel, Laravel-запрос-строитель,
Похожие вопросы