如何将此sql语句转换为laravel orm?

Posted

技术标签:

【中文标题】如何将此sql语句转换为laravel orm?【英文标题】:how can convert this sql statment to laravel orm? 【发布时间】:2014-05-09 10:17:31 【问题描述】:
SELECT book_id, COUNT(*)
FROM book
GROUP BY book_id
ORDER BY COUNT(*) DESC

如何将此 sql 语句转换为 Laravel ORM?

编辑:

此 sql 语句在 mysql 中有效,但在 int laravel 中无效

【问题讨论】:

【参考方案1】:

这可能会起作用:

$result = Book::select(array('book_id', DB::raw('COUNT(*) as count')))
            ->groupBy('book_id')
            ->orderBy(DB::raw('COUNT(*)'), 'desc')
            ->get();

要测试/调试您的查询,请在其前面添加:

DB::listen(function($sql, $bindings, $time) 
    var_dump($sql);
    var_dump($bindings);
);

或者发送到日志:

DB::listen(function($sql, $bindings, $time) 
    var_dump($sql);
    var_dump($bindings);
);

此代码会将构建的查询绘制到您的浏览器页面中,如下所示:

DB::listen(function($sql, $bindings, $time) 
    Log::info($sql);
    Log::info($bindings);
);

然后查看您的日志:

php artisan tail

【讨论】:

这个可以转成ORM吗? 这是 Eloquent ORM。 我现在尝试使用它,但显示此错误“找不到列:1054 未知列 'COUNT(*)'” 我刚刚为 Laravel 4 编辑了它,并添加了一种调试方法。我最后还使用 users 表测试了该查询,它运行良好。 问题是,你的数据库服务器可以通过count(*)订购吗?您之前是否在数据库服务器中运行过该查询?这个错误Column not found: 1054 Unknown column 'COUNT(*)' 看起来你的数据库服务器没有将它理解为一个列。

以上是关于如何将此sql语句转换为laravel orm?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此 SQL 转换为 Laravel Query Builder 查询?

如何将此 sql 查询转换为 laravel 查询生成器

如何将此查询从SQL(mysql)转换为Eloquent(Laravel)

laravel如何打印orm封装的sql语句

laravel ORM怎么打印出执行sql语句

如何将 sql 转换为查询生成器 laravel