我是CakePHP的新手,我想查询我的数据库中的位置,具体取决于Google Maps Lat& LNG。如果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 :(得分:1)
如果$ params ['bounds']为真,我怎么才能添加两个andWhere语句?
查询方法旨在使用fluent interface来使用(如问题所示);这意味着每个方法都返回$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
,必须使用the use language construct。与某些语言(最明显的是javascript)函数不同,不会自动访问父作用域中的变量。