Laravel: обновить строки одним запросом - PullRequest
1 голос
/ 19 сентября 2019

В моей таблице есть поля title и slug, где slug == null.А теперь, как я могу написать в slug поле title slug, используя фасад Str::slug($title) с одним запросом, если это возможно, конечно.

Я могу сделать это с большим количеством запросов к базе данных:

foreach ($posts as $post) {
    $post->update(['slug' => Str::slug($post->title)]);
}

Но как я могу сделать это примерно так с помощью одного запроса:

Post::all()->update(['slug' => Str::slug($this->title)]);

Может быть, это возможно, добавив callback в метод all() коллекции?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Вы можете сделать это так, если значение для всех них одинаково.

Post::query()->update(['slug' => Str::slug($this->title)]);

Вы можете проверить это с помощью

DB::enableQueryLog();
Post::query()->update(['slug' => Str::slug($this->title)]);
$log = DB::getQueryLog();
dd($log);
0 голосов
/ 19 сентября 2019

Я думаю, что то, что вы хотите сделать, невозможно, потому что метод all() возвращает коллекцию, и с этим не связано обновление такого метода.

Хотя вы можете создать метод в контроллеревыполнить foreach, который вы упомянули, и сделать ваш код более чистым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...