Laravel / MySQL在where子句中使用计算的别名列

时间:2018-08-16 10:33:06

标签: php mysql laravel orm eloquent

有人可以帮助下面的代码。尽管我将其定义为...,但由于不存在大声的“距离”,所以我遇到了错误。

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;    

}

2 个答案:

答案 0 :(得分:2)

MySQL在某些版本之前已将这种比较与别名列删除。

它仅适用于排序,分组和拥有。

您可以使用:

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

我建议对空值使用合并。

修改

提供的其他答案也是有效的。

答案 1 :(得分:1)

HAVING可用于比较别名的值。

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