【问题标题】:How can I pass a previously declared DB::raw() column into a whereRaw() query如何将先前声明的 DB::raw() 列传递到 whereRaw() 查询
【发布时间】:2019-10-07 13:06:10
【问题描述】:

我有一个 laravel 雄辩的查询,它获取用户 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);

查询有效并计算所有距离。但是我无法查询这些距离。因为将“距离”传递给 whereRaw() 语句似乎没有延续?

我明白了

Unknown column 'distance' in 'where clause' 

有人知道我该怎么做吗?

所有其他答案都说尝试 HAVING 而不是 WHERE,因为它是 MYSQL 问题。但是当我尝试 laravel havingRaw() 它仍然不起作用?

【问题讨论】:

  • 不能在 where 子句中使用别名
  • Here 很好的答案。

标签: php laravel eloquent lumen


【解决方案1】:

您可以尝试使用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);

【讨论】:

  • 仍然得到“‘有子句’中的未知列‘距离’”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2018-04-15
  • 2021-03-02
相关资源
最近更新 更多