Php 在where子句中使用计算别名列的Laravel/MySQL
请有人帮我输入下面的代码。我得到一个错误,因为冒号“距离”不存在,即使我已经定义为Php 在where子句中使用计算别名列的Laravel/MySQL,php,mysql,laravel,orm,eloquent,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(' . $
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;
}
公共静态函数getByDistance($lat、$lng、$distance)
{
$result=Auction::join('users','auctions.user_id','=','users.id'))
->选择(DB::raw('users.id','(3959*acos(弧度('.$lat'))*cos(弧度(lat))*cos(弧度(lng)-弧度('.$lng'))+sin(弧度('.$lat'))*sin(弧度(lat)))作为距离)
->其中('distance','MySQL在一些版本之前放弃了与别名列的这种比较
它只是用于排序、分组和存储
您可以使用:
whereRaw('(子查询)<?',['distance'=>$distance])
我建议对空值使用coalesce
编辑
另外,提供的另一个答案也有效。have可用于比较别名的值
having('distance', '<', $distance);
having('distance'),请查看以下答案: