Php 范围中的Laravel自身变量

Php 范围中的Laravel自身变量,php,laravel,eloquent,query-builder,Php,Laravel,Eloquent,Query Builder,我用哈弗森公式计算距离,这很好。 但我想隐藏距离大于该结果上“最大半径”字段的结果 这是我的数据库方案 这就是我正在使用的查询。 您可以看到我硬编码了距离(50) 公共功能范围FitsDistance($query、$lat、$lng) { return$query->select(\DB::raw(“*”, (3959*acos(cos(弧度(?)* cos(弧度(纬度)) *cos(弧度(lng)-弧度(?) )+sin(弧度(?)* sin(弧度(纬度))) )如距离“)) ->addB

我用哈弗森公式计算距离,这很好。

但我想隐藏距离大于该结果上“最大半径”字段的结果

这是我的数据库方案

这就是我正在使用的查询。 您可以看到我硬编码了距离(50)

公共功能范围FitsDistance($query、$lat、$lng)
{
return$query->select(\DB::raw(“*”,
(3959*acos(cos(弧度(?)*
cos(弧度(纬度))
*cos(弧度(lng)-弧度(?)
)+sin(弧度(?)*
sin(弧度(纬度)))
)如距离“))
->addBinding($lat,'select')
->添加绑定($lng,'select')
->addBinding($lat,'select')

->having('distance'),'having('distance'),'having
having仅适用于
分组方式


您可以进行子选择,然后改用
WHERE
子句。

您可以提供一个代码示例吗?我不确定我是否知道如何实现子选择。谢谢!
public function scopeFitsDistance($query, $lat, $lng)
{
    return $query->select(\DB::raw("*,
                      ( 3959 * acos( cos( radians(?) ) *
                        cos( radians( lat ) )
                        * cos( radians( lng ) - radians(?)
                        ) + sin( radians(?) ) *
                        sin( radians( lat ) ) )
                      ) AS distance"))
            ->addBinding($lat, 'select')
            ->addBinding($lng, 'select')
            ->addBinding($lat, 'select')
            ->having('distance', '<', 50); <----------
}
->having('distance', '<', 'max_radius');