0

ユーザーが入力した日付がデータベース上の任意の日付と重複しているかどうかを調べようとしています。

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

データを取得する方法のドキュメントを読みましたが、私の一生の間、データを希望どおりに機能させることはできません。

4

1 に答える 1

1

今、私は間違っている可能性がありますが、あなたの問題はあなたの配列宣言の中にあると思います:

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

PHPに関する限り、配列で「AND」キーを宣言し、それを再割り当てしました。Cake Cookbookによると、同じフィールドを別々の配列で宣言する必要があります。

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

これにより、クエリが2つの条件を同じものとして扱い、エントリを上書きするのを防ぐことができます。

于 2013-02-04T15:51:54.347 に答える