Я могу получить частоту строки довольно легко, как это:
$urls = URL::select('url',DB::raw('count(*) as frequency'))
->groupBy('url')
->get();
а затем получить значение частоты из каждой строки в запросе, но что если я захочу снова включить частоту в таблицу? Например, моя таблица имеет следующие значения:
Частота, URL, ID
Как бы я создал функцию для запуска через таблицу и обновлять каждую строку с ее частотой?
это может быть проще (и быстрее) выполнить прямой запрос вместо использования построителя запросов. Я уверен, что есть способ сделать это «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();
}
Других решений пока нет …