php - Laravel ORM 获取每一行的频率并将其重新插入表中

标签 php mysql sql laravel

我可以像这样很容易地获得一行的频率:

$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/

相关文章:

php - 添加或更新 MySQL 记录而不总是更新 date_modified 列

PHP OOP MySQL 注册系统 MySQL_NUM_Row 错误

java - 如何组合这些 mysql 语句

sql - go-GORM无法插入值

sql - postgres 使用副本插入带有字段时间戳的 CSV 时出错

php - 如果没有唯一列不存在,MySQL插入多条记录

phpDoc,类实例作为@param?

MySQL 使用带联合的 select 查询更新表给出每个派生表必须有自己的别名错误

php - 如何将版权和作者信息添加到用 PHP 创建的图像中?

mysql - 更正错误的 insert-from-select SQL 语句