У меня есть Модель продуктов, Модель магазинов, и Продукты принадлежат Магазинам, в модели магазинов у меня есть это:
public function scopeWithDistance($query,$lat,$lng){
$q = $query;
if($lat != 0 && $lng != 0){
$raw = 'floor((floor(3959 * acos(cos(radians(:lat1)) * cos(radians(lat))
* cos(radians(lng) - radians(:lng))
+ sin(radians(:lng2)) * sin(radians(lat)))
)) * 1.609344) AS distance';
return $query->selectRaw($raw, [
'lat1' => $lat,
'lng' => $lng,
'lat2' => $lat,
]);
}
return $q;
}
Я мог бы легко получить атрибуты магазина плюс рассчитанное расстояние с помощью:
App\Store::withDistance(20.6008362,-100.3966416)->get();
in tinker.
Но когда я запускаю запрос, пытаясь получить Store :: withDistance через мою модель Product, он не возвращает мне поле расстояния: (
Мой запрос:
$query = Product::whereHas('mm_product')
->with(['media', 'category', 'master_category', 'store.user.user_data', 'store.user.media', 'tag'])
->whereHas('store', function ($q) use ($state_id, $shop_id, $lat, $lng) {
if ($state_id && $shop_id == 0) {
$q->where(function ($q) use ($state_id, $lat, $lng) {
$q->whereNotNull('lat')->whereNotNull('lng')->where('state_id', $state_id)->withDistance($lat, $lng);
});
}
});
ПОМОГИТЕ МНЕ ПОЖАЛУЙСТА: '(
РЕДАКТИРОВАТЬ: я делаю так, потому что я хочу сделать orderBy и разбить на страницы результаты на основе расчета расстояния.