CakePHP3: генерировать DB-Query

Я новичок в CakePHP и хотел бы запрашивать местоположения в моей БД в зависимости от Google Maps Lat & ДЛН. Как я могу добавить два andWhere только заявления, если $params['bounds'] правда?

$params = [
'bounds' => 1,
'swLat' => ...,
'swLng' => ...,
'neLat' => ...,
'neLng' => ...
];

$locations = $this->Locations
->find()
->select(['id', 'name', 'lat', 'lng'])
->where(['live' => 1])
->andWhere(function ($exp, $q) {
return $exp->between('lat', $params['swLat'], $params['neLat']);
})
->andWhere(function ($exp, $q) {
return $exp->between('lng', $params['swLng'], $params['neLng']);
})
->order(['name' => 'ASC']);

0

Решение

Как я могу добавить только два оператора andWhere, если $ params [‘bounds’] имеет значение true?

Методы запроса предназначены для использования (как показано в вопросе) с использованием свободный интерфейс; это означает, что каждый метод возвращает $this объект.

Итак, чтобы добавить условную логику, сначала выполните безусловные вызовы:

$locations = $this->Locations->find()
->select(['id', 'name', 'lat', 'lng'])
->where(['live' => 1])
->order(['name' => 'ASC']);

А затем примените любые другие звонки, которые вы пожелаете:

if (!empty($params['bounds'])) {
$locations
->andWhere(function ($exp, $q) use ($params) {
return $exp
->between('lat', $params['swLat'], $params['neLat']);
->between('lng', $params['swLng'], $params['neLng']);
})
}

Обратите внимание, что для $params быть доступным в закрытом помещении, переданном andWhere — необходимо использовать использование языковой конструкции. В отличие от некоторых языков (в частности, JavaScript) функции не делайте автоматически иметь доступ к переменным в родительской области.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector