#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]);