计算最近位置时的语法错误

时间:2019-01-06 14:21:56

标签: php laravel

enter code here我猜它非常简单,但是可以肯定的是我在这里遗漏了一些东西。 我在这里想要实现的是使用当前位置来计算最近的位置。无需添加计算部分,查询就可以正常工作。

我收到一条错误消息,提示“语法错误,意外的'AS'(T_AS),期望','或')'”

任何帮助将不胜感激。

enter code here
$testjoin = doctors::where('location_id',$data['location_id'])
                        ->where('medication_id',$data['medication_id'])
                        ->where('specialization_id',$data['specialization_id'])
                        ->where('facility_id',$data['facility_id'])
                        ->where('distance','<=',20)->orderBy('distance','desc')->take('20')
                ->join('locations', 'doctors.location_id', '=', 'locations.id')
                ->join('medication_types', 'doctors.medication_id','=','medication_types.id')
                ->join('specializations', 'doctors.specialization_id','=','specializations.id')
                ->join('facility_types', 'doctors.facility_id','=','facility_types.id')
                ->select(
                    'doctors.id',
                    'doctors.location_id',
                    'doctors.first_name',
                    'doctors.contact',
                    'doctors.email',
                    'doctors.lat',
                    'doctors.lng',
                    'locations.location',
                    'medication_types.medication',
                    'specializations.specialization',
                    'facility_types.type',
                    DB::raw( 6371 * acos( cos( radians(15.538210) ) * cos( radians( lat ) ) * 
                cos( radians( lng ) - radians(73.822974) ) + sin( radians(15.538210) ) * 
                sin( radians( lat ) ) )  AS distance )
                )->get();

1 个答案:

答案 0 :(得分:0)

我认为您无法在select中进行计算。选择()仅选择字段。请尝试更改计算

 ( 6371 * acos( cos( radians(15.538210) ) * cos( radians( lat ) ) * 
       cos( radians( lng ) - radians(73.822974) ) + sin( radians(15.538210) ) * 
       sin( radians( lat ) ) ) ) AS distance 

通过

 DB:raw( 6371 * acos( cos( radians(15.538210) ) * cos( radians( lat ) ) * 
       cos( radians( lng ) - radians(73.822974) ) + sin( radians(15.538210) ) * 
       sin( radians( lat ) ) )  AS distance )

您可以使用DB:raw在所选字段中准备新列。

请检查“来自”,“具有”,“限制”,“订购”,所有这些都可以用作医生模型的方法。例如。

->where('distance','<=',20)->orderBy('distance','desc')->take('20')->get()

请尝试一下,让我知道它如何工作:)