如何将先前声明的 DB::raw() 列传递到 whereRaw() 查询中
How can I pass a previously declared DB::raw() column into a whereRaw() query
我有一个 laravel eloquent 查询获取用户 ID,以及他们与你自己位置的距离
$lat = Auth::user()->lat;
$lon = Auth::user()->lon;
$users = DB::table('users')
->select(DB::raw("id, ASIN(SQRT( POWER(SIN(($lat
- abs(lat))*pi()/180/2),2)+COS($lat*pi()/180 )*COS(abs(lat)*pi()/180)
*POWER(SIN(($lon-lon)*pi()/180/2),2)))as distance))
->whereRaw("distance < $radius")
>paginate($this->takeResults);
查询有效并计算了所有距离。但后来我无法查询这些距离。因为将 'distance' 传递给 whereRaw() 语句似乎没有结转?
我明白了
Unknown column 'distance' in 'where clause'
有人知道我该怎么做吗?
所有其他答案都说尝试 HAVING 而不是 WHERE,因为这是一个 MYSQL 问题。但是当我尝试 laravels havingRaw() 时它仍然不起作用?
您可以尝试使用 havingRaw()
$lat = Auth::user()->lat;
$lon = Auth::user()->lon;
$users = DB::table('users')
->select(DB::raw("id, ASIN(SQRT( POWER(SIN(($lat - abs(lat))*pi()/180/2),2)+COS($lat*pi()/180 )*COS(abs(lat)*pi()/180)*POWER(SIN(($lon-lon)*pi()/180/2),2)))as distance"))
->havingRaw("'distance' < $radius")
->paginate($this->takeResults);
我有一个 laravel eloquent 查询获取用户 ID,以及他们与你自己位置的距离
$lat = Auth::user()->lat;
$lon = Auth::user()->lon;
$users = DB::table('users')
->select(DB::raw("id, ASIN(SQRT( POWER(SIN(($lat
- abs(lat))*pi()/180/2),2)+COS($lat*pi()/180 )*COS(abs(lat)*pi()/180)
*POWER(SIN(($lon-lon)*pi()/180/2),2)))as distance))
->whereRaw("distance < $radius")
>paginate($this->takeResults);
查询有效并计算了所有距离。但后来我无法查询这些距离。因为将 'distance' 传递给 whereRaw() 语句似乎没有结转?
我明白了
Unknown column 'distance' in 'where clause'
有人知道我该怎么做吗?
所有其他答案都说尝试 HAVING 而不是 WHERE,因为这是一个 MYSQL 问题。但是当我尝试 laravels havingRaw() 时它仍然不起作用?
您可以尝试使用 havingRaw()
$lat = Auth::user()->lat;
$lon = Auth::user()->lon;
$users = DB::table('users')
->select(DB::raw("id, ASIN(SQRT( POWER(SIN(($lat - abs(lat))*pi()/180/2),2)+COS($lat*pi()/180 )*COS(abs(lat)*pi()/180)*POWER(SIN(($lon-lon)*pi()/180/2),2)))as distance"))
->havingRaw("'distance' < $radius")
->paginate($this->takeResults);