2013-02-04 86 views
0

我在查找用戶輸入的日期是否與數據庫中的任何日期重疊。創建複雜的SQL語句 - CakePHP

我已經得到了SQL語句(可能需要一些調整,將測試),但我努力正確地把它放入cakePHP。

我有什麼

$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']) 
      ) 
     ) 
    ) 
)); 

是什麼創造

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')) 

我想要什麼

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')) 

我已經閱讀了關於如何retrieve data的文檔,但是對於我的生活而言,我無法按照自己想要的方式工作。現在

回答

1

,我可能是不正確的,但我相信你的問題是您的數組聲明中:

array(
    'AND' => array(
     ... 
    ), 
    'AND' => array(
     ... 
    ) 
) 

至於PHP來說你剛剛宣佈的陣列中的一個「AND」鍵,然後重新分配它。按照Cake Cookbook,你需要在不同的陣列來聲明相同的字段:

'OR' => array(
    array('AND' => array (...)), 
    array('AND' => array (...)) 
) 

這應該阻止查詢從治療你的兩個條件,同樣的事情,覆蓋條目。