【问题标题】:Laravel: Unknown column when using alias in DB::raw()Laravel:在 DB::raw() 中使用别名时的未知列
【发布时间】: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_scoreranking 表中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


【解决方案1】:

尝试使用DB::statement($query); 方法。

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 2020-02-06
    • 2023-02-11
    • 2015-07-14
    • 2015-10-27
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多