[英]Create complex SQL statement - CakePHP
I'm trying to find if the user entered date overlaps any date on the database. 我正在尝试查找用户输入的日期是否与数据库中的任何日期重叠。
I've got the SQL statement down (might need a few tweaks, will test) but I'm struggling to get it into cakePHP correctly. 我已经关闭了SQL语句(可能需要做一些调整,将进行测试),但是我正在努力使其正确地进入cakePHP。
What do I have 我有什么
$result = $this->find('all', array(
'conditions' => array(
'OR' => array(
'AND' => array(
array('BoardroomBooking.start_time >=' => $this->data['BoardroomBooking']['start_time']),
array('BoardroomBooking.start_time <' => $this->data['BoardroomBooking']['start_time'])
),
'AND' => array(
array('BoardroomBooking.start_time <=' => $this->data['BoardroomBooking']['start_time']),
array('BoardroomBooking.start_time >' => $this->data['BoardroomBooking']['end_time'])
)
)
)
));
What does it create 它创造了什么
SQL Query: SELECT `BoardroomBooking`.`id`, `BoardroomBooking`.`name`,
`BoardroomBooking`.`boardroom_id`, `BoardroomBooking`.`date`,
`BoardroomBooking`.`start_time`, `BoardroomBooking`.`end_time`,
`BoardroomBooking`.`notes`, `BoardroomBooking`.`recurrence_id`,
`BoardroomBooking`.`created`, `BoardroomBooking`.`modified`, `Boardroom`.`id`,
`Boardroom`.`name`, `Boardroom`.`created`, `Boardroom`.`modified` FROM
`intraweb_db`.`boardroom_bookings` AS `BoardroomBooking` LEFT JOIN
`intraweb_db`.`boardrooms` AS `Boardroom` ON (`BoardroomBooking`.`boardroom_id`
= `Boardroom`.`id`) WHERE ((`BoardroomBooking`.`start_time` <= '12:55:00') AND
(`BoardroomBooking`.`start_time` > '13:00:00'))
What I want 我想要的是
SQL Query: SELECT `BoardroomBooking`.`id`, `BoardroomBooking`.`name`,
`BoardroomBooking`.`boardroom_id`, `BoardroomBooking`.`date`,
`BoardroomBooking`.`start_time`, `BoardroomBooking`.`end_time`,
`BoardroomBooking`.`notes`, `BoardroomBooking`.`recurrence_id`,
`BoardroomBooking`.`created`, `BoardroomBooking`.`modified`, `Boardroom`.`id`,
`Boardroom`.`name`, `Boardroom`.`created`, `Boardroom`.`modified` FROM
`intraweb_db`.`boardroom_bookings` AS `BoardroomBooking` LEFT JOIN
`intraweb_db`.`boardrooms` AS `Boardroom` ON (`BoardroomBooking`.`boardroom_id`
= `Boardroom`.`id`) WHERE (`BoardroomBooking`.`start_time` >= '12:55:00' AND
`BoardroomBooking`.`start_time` < '12:55:00') OR (`BoardroomBooking`.`start_time`
<= '12:55:00') AND (`BoardroomBooking`.`start_time` > '13:00:00'))
I've read up on the documentation of how to retrieve data , but for the life of me can't get it to work the way I want it. 我已经阅读了有关如何检索数据的文档,但是我一生无法使它按我想要的方式工作。
Now, I could be incorrect, but I believe your issue is within your array declaration: 现在,我可能是不正确的,但是我相信您的问题在数组声明中:
array(
'AND' => array(
...
),
'AND' => array(
...
)
)
As far as PHP is concerned you've just declared an "AND" key in the array, then re-assigned it. 就PHP而言,您刚刚在数组中声明了“ AND”键,然后将其重新分配。 According to the Cake Cookbook , you need to declare identical fields in separate arrays:
根据Cake Cookbook ,您需要在单独的数组中声明相同的字段:
'OR' => array(
array('AND' => array (...)),
array('AND' => array (...))
)
This should prevent the query from treating your two conditions as the same thing and overwriting the entry. 这样可以防止查询将您的两个条件视为同一事物并覆盖条目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.