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();
答案 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()
请尝试一下,让我知道它如何工作:)