如何在带有 Laravel 的别名列上使用原始 SELECT 和 WHERE?

How to use raw SELECT and WHERE on aliased column with Laravel?

我正在尝试将原始 select 与 Laravel Eloquent 一起使用。但不幸的是,我不能对别名 "SELECT AS" 字段(距离)使用 WHERE 条件。

我收到 "Column not found: 1054 Unknown column 'distance' in 'where clause'" 错误。

如何使用 "distance" 作为 Eloquent 的条件?

这是我的代码

            $firebaseUsers = FirebaseUser::when( (!empty($distance)) , function ($query) use ($distance, $user) {
                return $query->select('firebase_users.*', DB::raw("ST_Distance_Sphere( POINT(".$user->latitude.", ".$user->longitude."), POINT(latitude, longitude) ) as distance") )
                    ->whereNotNull('latitude')
                    ->whereNotNull('longitude')
                    ->whereRaw('distance <= ?',  [$distance * 1000]);
            })
            ->where('firebase_id', '!=', $user->firebase_id)
            ->orderByRaw( "FIELD(paid_status, 'yes', 'no')" )
            ->orderBy('last_online', 'DESC')
            ->paginate(30);

您需要对派生列使用 having()

->having('distance', '<=', $distance * 1000);

但分页不适用于 having()https://github.com/laravel/framework/issues/3105