【问题标题】:Eloquent doesn't recognize my alias [duplicate]Eloquent 无法识别我的别名 [重复]
【发布时间】:2018-06-25 00:09:12
【问题描述】:

我有一个查询要搜索具有一定距离的用户:

$q->addSelect(DB::raw(
    '( acos(cos(radians(' . Auth::user()->latitude . '))' .
        '* cos( radians( users.latitude ) )' .
        '* cos( radians( users.longitude )' .
        '- radians(' . Auth::user()->longitude . ') )' .
        '+ sin( radians(' . Auth::user()->latitude . ') )' .
        '* sin( radians( users.latitude ) ) ) ) as distance'
));
$q->having('distance', '<', $search->distance);

我收到此错误:找不到列:“有子句”中的 1054 列“距离”未知

当我在 PhpMyAdmin 中运行查询并返回 $q-&gt;toSql(); 时,我的查询有效吗?!

【问题讨论】:

  • 你尝试过 ->where() 而不是 ->have() no groupBy in here....
  • @koalaok 是的,一样。
  • 如何将 DB::raw 与其他选定字段一起放入 $q->select() 的参数中?
  • @koalaok 相同结果
  • 请发布$q-&gt;toSql();的结果。

标签: laravel laravel-5 eloquent


【解决方案1】:

你应该考虑创建一个子查询。

您可以转储您尝试执行的查询吗?

\DB::enableQueryLog()
...
dd(\DB::getQueryLog());

【讨论】:

  • 我得到一个空数组
【解决方案2】:

addSelect() 方法在您之前在查询构建器中使用过 select() 方法时使用,如果不是这种情况,请尝试将其更改为

$q->select('( 6371 * acos(cos(radians(' . Auth::user()->latitude . '))' .
        '* cos( radians( users.latitude ) )' .
        '* cos( radians( users.longitude )' .
        '- radians(' . Auth::user()->longitude . ') )' .
        '+ sin( radians(' . Auth::user()->latitude . ') )' .
        '* sin( radians( users.latitude ) ) ) ) as distance')->having('distance', '<', $search->distance);

$q->selectRaw('( 6371 * acos(cos(radians(' . Auth::user()->latitude . '))' .
        '* cos( radians( users.latitude ) )' .
        '* cos( radians( users.longitude )' .
        '- radians(' . Auth::user()->longitude . ') )' .
        '+ sin( radians(' . Auth::user()->latitude . ') )' .
        '* sin( radians( users.latitude ) ) ) ) as distance')->having('distance', '<', $search->distance);

【讨论】:

  • 我编辑了,但是以后用户可以加距离或者不加距离,所以我的2个选择必须分开。
猜你喜欢
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 2019-08-05
相关资源
最近更新 更多