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

时间:2018-04-11 14:50:27

标签: php laravel laravel-5 laravel-4 eloquent

我正在尝试使用Laravel Eloquent进行原始选择。但遗憾的是,我不能对别名“SELECT AS”字段(距离)使用WHERE条件。

我在“where子句”中找到“未找到列:1054未知列'距离'”错误。

如何使用“距离”作为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);

1 个答案:

答案 0 :(得分:2)

您需要将having()用于派生列:

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

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