laravel/mysql在where子句中使用计算别名列

vmdwslir  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(504)

有人能帮我写下面的代码吗。我得到一个错误,因为Column'距离'不存在,即使我已经定义为。。。

public static function getByDistance($lat, $lng, $distance)
{
  $result = Auction::join('users', 'auctions.user_id', '=', 'users.id')
        ->select(DB::raw('users.id', '( 3959 * acos( cos( radians(' . $lat . ') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(lat) ) ) ) as distance'))
        ->where ('distance', '<', $distance)
        ->get();

return $result;    

}
czq61nw1

czq61nw11#

having可用于比较别名的值。

having('distance', '<', $distance);
pod7payv

pod7payv2#

mysql在一些版本之前就放弃了这种与别名列的比较。
它只适用于排序、分组和存储。
您可以使用:

whereRaw( '(SUBQUERY) < ?', ['distance' => $distance])

我建议对空值使用coalesce。
编辑
另外一个答案也很有效。

相关问题