特定の都市から所定のkm以内のユーザーを検索するスクリプトがあります。データベースのユーザーは、都市、経度、および緯度を持ちます。ユーザー1はNYC、ユーザー2はワシントンDCです。私は1000kmでも距離を置くことができますが、仕事はありません。どうして?km以内のユーザーを検索できません
$user = User::with('user_data');
if ($request->has('city')) {
$user->whereHas('user_data', function($query) use ($request) {
return $query->where('residence', $request->city);
});
}
if ($request->has('city')) {
$latitude = app('geocoder')->geocode($request->city)->get()->first()->getCoordinates()->getLatitude();
$longitude = app('geocoder')->geocode($request->city)->get()->first()->getCoordinates()->getLongitude();
$user->whereHas('user_data', function($query) use ($request, $latitude, $longitude) {
return $query->whereRaw("(6371 * acos (cos (radians(".$latitude.")) * cos(radians(residence_latitude)) * cos(radians(residence_longitude) - radians(".$longitude.")) + sin (radians(".$latitude.")) * sin(radians(residence_latitude))) <= ". $request->distance .")");
});
}
正確には、何を意味するかを「動作しない」のでしょうか?何がうまくいかない - エラー?計算が正しくありませんか?他に何か? – ADyson
@ADyson私はNYCからのユーザーだけを参照しています.WDC – Programmmereg
データベース内の生データを見ることなく、クエリが正しいかどうかを言うことは不可能です。しかし...あなたのwhereRawは2つの値を試してみるようです。私は$ request-> distanceはあなたが入力したkm単位の値であると仮定します。出力されるはずの左の計算は何ですか?それを一貫して実行します - それはあなたが期待する価値を生み出しますか? – ADyson