Собственная переменная Laravel в области видимости

Я использую формулу гаверсинуса для расчета расстояния, это работает нормально.

Но я хотел бы скрыть результаты, где расстояние больше, чем поле max_radius для этого результата.

Это моя схема базы данных.

введите здесь описание изображения

Это запрос, который я использую. Вы можете видеть, что я жестко запрограммировал расстояние (50)

public function scopeFitsDistance($query, $lat, $lng)
{
    return $query->select(\DB::raw("*,
                      ( 3959 * acos( cos( radians(?) ) *
                        cos( radians( lat ) )
                        * cos( radians( lng ) - radians(?)
                        ) + sin( radians(?) ) *
                        sin( radians( lat ) ) )
                      ) AS distance"))
            ->addBinding($lat, 'select')
            ->addBinding($lng, 'select')
            ->addBinding($lat, 'select')
            ->having('distance', '<', 50); <----------
}

Но теперь мне интересно, как я могу скрыть результаты, где это расстояние ‹ max_radius, которое является полем внутри таблицы.

Следующее не возвращает никаких результатов

->having('distance', '<', 'max_radius');

Благодарю вас!


person Miguel Stevens    schedule 24.02.2017    source источник


Ответы (1)


HAVING работает только с GROUP BY

Вы можете сделать дополнительный выбор, а затем вместо этого использовать предложение WHERE.

person KimWordWax    schedule 24.02.2017
comment
Можете ли вы предоставить пример кода, пожалуйста? Я не уверен, знаю ли я, как реализовать подзапрос. спасибо! - person Miguel Stevens; 24.02.2017