这是我的代码:
public function scopeClosest($query, $lat, $lng)
{
return $query->selectRaw(
'Select * , ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance'
);
}
如果我运行它,我会收到此错误:
语法错误或访问冲突:1064 SQL语法中出错;查看与您的MariaDB服务器版本对应的手册,以便在#39;选择*(3959 * acos(cos(弧度(37))* cos(弧度(纬度))* cos(弧度'在第1行
如果我删除Select *,它看起来像这样:
return $query->selectRaw(
'( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance'
);
没有产生错误,我得到5个对象,但它们只包含这样的距离:
#items: Collection {#377 ▼
#items: array:5 [▼
0 => Listing {#378 ▼
#connection: null
#table: null
#primaryKey: "id"
#keyType: "int"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:1 [▼
"distance" => 5511.8536628578
]
答案 0 :(得分:1)
我不确定但是试试这个:
return $query->selectRaw(
'*, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance'
);