【发布时间】:2015-02-02 15:43:17
【问题描述】:
我在 Laravel 中运行以下 SQL:
$sql = 'SELECT university.id, university.name, MAX(uni_score) AS score
FROM (SELECT uni_id, place AS uni_score FROM ranking) AS tmp
LEFT JOIN university ON university.id = tmp.uni_id
ORDER BY score';
$result = DB::select(DB::raw($sql));
但是代码抛出了这个错误:
未找到列:1054 “字段列表”中的未知列“uni_score”。
uni_score 是ranking 表中place 字段的别名。当直接在 phpMyAdmin 中运行时,上面的查询工作正常。
我做错了什么?
【问题讨论】:
-
尝试使用以下命令查看 Laravel 正在运行的确切查询:
$queries = DB::getQueryLog();$last_query = end($queries);dd($last_query);看看是否有意外发生。 -
问题是我不能这样做,因为查询由于抛出的错误而中止。我很确定这是 Laravel 的查询生成器问题,而不是真正的 SQL 错误。我就是不知道怎么解决。
-
哦,对,那会发生。唔。我唯一能想到的另一件事是将您的
DB::select(...)语句更改为DB::connection("connection_name")->select(DB::raw($sql));,因为这就是我拥有所有DB::raw()语句的方式,这是我能看到的唯一区别。 -
不认为这会有所帮助,但还是尝试了。没有运气。
-
是的,我也没有。仅对多个数据库连接有意义,但值得一试。最后一件事,混合你的选择。在可能的情况下使用
Model::select(),在查询生成器不起作用的情况下使用DB::raw()。
标签: php mysql laravel query-builder