Как обновить все строки таблицы, не извлекая их в Laravel? - PullRequest
2 голосов
/ 17 апреля 2020

Я пытаюсь обновить все строки в одной из моих таблиц базы данных, но получаю следующую ошибку:

Non-stati c метод Illuminate \ Database \ Eloquent \ Model :: update () не должен вызываться статически

Я делаю это в процессе миграции:

public function up()
{
    Schema::table('rooms', function (Blueprint $table) {
        $table->json('beds')->nullable();
    });

    Room::update([
        'beds' => ['One King', 'Two Doubles']
    ]);

    Schema::table('rooms', function (Blueprint $table) {
        $table->json('beds')->nullable(false)->change();
    });
}

Я добавляю столбец json 'beds' к моим существующим таблицам 'rooms 'и хочу установить значение по умолчанию ['One King', 'Two Doubles'], мне интересно, могу ли я сделать это непосредственно в запросе без загрузки моделей.

Я придумал следующее решение, но оно выглядит "хакерским" :

// All id's are bigger than 0
Room::where('id', '>', 0)->update([
    'beds' => ['One King', 'Two Doubles']
]);

Кто-нибудь знает другой способ обновить все строки без оператора where?

1 Ответ

4 голосов
/ 17 апреля 2020

Вы можете вызвать метод stati c query() на модели:

// ::query() return an instance of \Illuminate\Database\Eloquent\Builder
Room::query()->update([
  'beds' => ['One King', 'Two Doubles']
]);
...