Установить значение столбца null для всех записей в Laravel

#php #laravel

#php #laravel

Вопрос:

В столбцах таблицы у меня есть столбец rank . Мне нужно для всех записей (10000 ) установить столбец rank null. Как я могу это сделать?

У меня есть статическая функция:

  public static function calculateRank() {
      DB::statement("UPDATE posts set rank = null");
      DB::statement("UPDATE posts..."); //do calculate ranks for all posts
 }
  

Я могу сделать это с DB::statement помощью . Но как я могу очистить рейтинг для всех сообщений с помощью eloquent, может быть, будет лучше и быстрее?

Комментарии:

1. почему это не одноразовое обновление БД? это повторится?

Ответ №1:

Я думаю, что очень маловероятно, что eloquent будет быстрее, поскольку он будет выполнять тот же SQL. Хотя читать было бы немного приятнее.

Обновите все сообщения с помощью Eloquent:

 Post::update(['rank' => null]);
  

Если вы хотите установить ранг на основе некоторой логики PHP, вы можете также просто перебирать каждый элемент, но это займет все больше и больше времени, поскольку у вас больше записей. Возможно, было бы лучше вычислять ранг каждый раз, когда отображается сообщение (если это вычисление выполняется относительно быстро).

Ответ №2:

Вы можете сделать это просто с помощью Laravel Eloquent, как показано ниже:

Post::query()->update(['rank' => null]);