Я новичок в 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']);
Как я могу добавить только два оператора 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) функции не делайте автоматически иметь доступ к переменным в родительской области.
Других решений пока нет …