如何在带有 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
我正在尝试将原始 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