Laravel ORM получает частоту каждого ряда и вставляет ее обратно в таблицу

Я могу получить частоту строки довольно легко, как это:

$urls = URL::select('url',DB::raw('count(*) as frequency'))
->groupBy('url')
->get();

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

Частота, URL, ID

Как бы я создал функцию для запуска через таблицу и обновлять каждую строку с ее частотой?

1

Решение

это может быть проще (и быстрее) выполнить прямой запрос вместо использования построителя запросов. Я уверен, что есть способ сделать это «Laravel Way», но он должен работать одинаково хорошо (при условии, что мой запрос правильный):

$query = "UPDATE urls u1 SET u1.frequency = (
SELECT COUNT(*) FROM urls u2 WHERE u1.url = u2.url GROUP BY u2.url
)";

DB::update($query);

Если вы действительно хотите сделать это по одному в более подходе Laravel-esque, я думаю, вы могли бы сделать что-то вроде:

$urls = Url::all();
foreach ($urls as $url) {
$url->frequency = (int) DB::table('urls')->where('url', '=', $url->url)->count();
$url->save();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector