cakephp 在条件中找到多组 OR
cakephp find multiple sets of OR in conditions
我看到另一个问题从技术上回答了我正在回答的问题,但我的查询不起作用。我认为查询是不言自明的,但它没有返回任何行。
CakePHP find conditions with multiple 'OR'
$sector_info['Notam'] = $this->Notam->find('all', array(
'group' => 'Notam.id',
'conditions' => array(
'AND' => array(
'OR' => array(
'Notam.notam_expire_dtg < '.date("YmdHis"),
'Notam.notam_expire_dtg' => '',
),
'OR' => array(
'Notam.account_id' => $sector_info['Airport']['identifier'],
'Notam.cns_location_id' => $sector_info['Airport']['identifier'],
'Notam.account_id' => $sector_info['Airport']['icao'],
'Notam.cns_location_id' => $sector_info['Airport']['icao'],
),
),
),
)
);
我想提取满足(未过期或没有过期)AND ( 或其他 4 个条件的通知。
提前致谢,
瑞安
编辑:这是输出的查询,根本没有提到 Notam.notam_expire_dtg:
SELECT `Notam`.`id`, `Notam`.`key`, `Notam`.`source_id`, `Notam`.`account_id`, `Notam`.`notam_id`, `Notam`.`notam_nrc`, `Notam`.`xoveraccountid`, `Notam`.`xovernotamid`, `Notam`.`notam_part`, `Notam`.`cns_location_id`, `Notam`.`icao_id`, `Notam`.`icao_name`, `Notam`.`total_parts`, `Notam`.`notam_effective_dtg`, `Notam`.`notam_expire_dtg`, `Notam`.`notam_lastmod_dtg`, `Notam`.`notam_text`, `Notam`.`notam_report`, `Notam`.`notam_qcode`, `Notam`.`pull`, `Notam`.`dflag`, `Notam`.`sql_update` FROM `aaid_cake`.`notams` AS `Notam` WHERE ((`Notam`.`account_id` IN ('PABE', 'BET')) OR (`Notam`.`cns_location_id` IN ('PABE', 'BET'))) GROUP BY `Notam`.`id`
php 基础知识:你不能 有重复的数组键,你的 ['OR']
的第二个声明覆盖了第一个。这会让你的错误变得显而易见。
试试这个:
'conditions' => [
'AND' => [
['OR' => [/*...*/]],
['OR' => [/*.../*]]
]
]
你能试试这个吗:
$sector_info['Notam'] = $this->Notam->find('all', array(
'group' => 'Notam.id',
'conditions' => array(
'OR' => array(
'Notam.notam_expire_dtg < '.date("YmdHis"),
'Notam.notam_expire_dtg' => '',
),
'AND'=>array(
'OR' => array(
'Notam.account_id' => $sector_info['Airport']['identifier'],
'Notam.cns_location_id' => $sector_info['Airport']['identifier'],
'Notam.account_id' => $sector_info['Airport']['icao'],
'Notam.cns_location_id' => $sector_info['Airport']['icao'],
)
),
),
)
);
我看到另一个问题从技术上回答了我正在回答的问题,但我的查询不起作用。我认为查询是不言自明的,但它没有返回任何行。
CakePHP find conditions with multiple 'OR'
$sector_info['Notam'] = $this->Notam->find('all', array(
'group' => 'Notam.id',
'conditions' => array(
'AND' => array(
'OR' => array(
'Notam.notam_expire_dtg < '.date("YmdHis"),
'Notam.notam_expire_dtg' => '',
),
'OR' => array(
'Notam.account_id' => $sector_info['Airport']['identifier'],
'Notam.cns_location_id' => $sector_info['Airport']['identifier'],
'Notam.account_id' => $sector_info['Airport']['icao'],
'Notam.cns_location_id' => $sector_info['Airport']['icao'],
),
),
),
)
);
我想提取满足(未过期或没有过期)AND ( 或其他 4 个条件的通知。
提前致谢, 瑞安
编辑:这是输出的查询,根本没有提到 Notam.notam_expire_dtg:
SELECT `Notam`.`id`, `Notam`.`key`, `Notam`.`source_id`, `Notam`.`account_id`, `Notam`.`notam_id`, `Notam`.`notam_nrc`, `Notam`.`xoveraccountid`, `Notam`.`xovernotamid`, `Notam`.`notam_part`, `Notam`.`cns_location_id`, `Notam`.`icao_id`, `Notam`.`icao_name`, `Notam`.`total_parts`, `Notam`.`notam_effective_dtg`, `Notam`.`notam_expire_dtg`, `Notam`.`notam_lastmod_dtg`, `Notam`.`notam_text`, `Notam`.`notam_report`, `Notam`.`notam_qcode`, `Notam`.`pull`, `Notam`.`dflag`, `Notam`.`sql_update` FROM `aaid_cake`.`notams` AS `Notam` WHERE ((`Notam`.`account_id` IN ('PABE', 'BET')) OR (`Notam`.`cns_location_id` IN ('PABE', 'BET'))) GROUP BY `Notam`.`id`
php 基础知识:你不能 有重复的数组键,你的 ['OR']
的第二个声明覆盖了第一个。这会让你的错误变得显而易见。
试试这个:
'conditions' => [
'AND' => [
['OR' => [/*...*/]],
['OR' => [/*.../*]]
]
]
你能试试这个吗:
$sector_info['Notam'] = $this->Notam->find('all', array(
'group' => 'Notam.id',
'conditions' => array(
'OR' => array(
'Notam.notam_expire_dtg < '.date("YmdHis"),
'Notam.notam_expire_dtg' => '',
),
'AND'=>array(
'OR' => array(
'Notam.account_id' => $sector_info['Airport']['identifier'],
'Notam.cns_location_id' => $sector_info['Airport']['identifier'],
'Notam.account_id' => $sector_info['Airport']['icao'],
'Notam.cns_location_id' => $sector_info['Airport']['icao'],
)
),
),
)
);