我可以像这样很容易地获得一行的频率:
$urls = URL::select('url',DB::raw('count(*) as frequency'))
->groupBy('url')
->get();
然后从查询中的每一行获取频率值,但是如果我想将频率重新插入表中怎么办?例如,我的表有这些值:
频率、url、id
我如何创建一个函数来遍历表格并按其频率更新每一行?
最佳答案
这可能通过直接查询而不是使用查询生成器更容易(更快)完成。我确信有一种方法可以用“Laravel 方式”来实现,但这也应该同样有效(假设我的查询是正确的):
$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 的方法一次一个地做,我想你可以这样做:
$urls = Url::all();
foreach ($urls as $url) {
$url->frequency = (int) DB::table('urls')->where('url', '=', $url->url)->count();
$url->save();
}
关于php - Laravel ORM 获取每一行的频率并将其重新插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41748912/