我正在使用Cake 2.3.8并且在有效搜索数据方面遇到了一些麻烦。我正在检索我正在寻找的数据,还有很多我不需要的东西。
例如说我有以下表格
table reservations
id | confirmation_number | guest_id
1 123 1
2 345 2
table reservation_details -a reservation can have multiple entries (multiple rooms)
id | reservation_id | date | time | room_id | rate
2 1 2014-18-04 13:00 1 9.99
4 1 2014-18-04 14:00 2 4.99
5 2 2014-19-04 13:00 2 4.99
使用以下型号
//Reservation model
public $actsAs = array('Containable');
public $hasMany = array('ReservationDetail');
//ReservationDetail model
public $actsAs = array('Containable');
public $belongsTo = array('Reservation');
现在搜索日期大于或等于19的预订。日期存储在reservation_details表中。
$reservations = $this->Reservation->find('all', array(
'conditions' => array(
'Reservation.guest_id' => '1'
),
'contain' => array(
'ReservationDetail' => array(
'conditions' => array(
'ReservationDetail.date >=' => '2014-19-04'
)
)
)
));
此搜索将返回Reservation#1,预留#1的ReservationDetail为空数组。问题是我不想要任何这些信息。如果ReservationDetail条件与我的搜索匹配,我只希望返回数据。现在,如果找不到匹配项,它只会为ReservationDetail返回一个空数组。
上述搜索的结果类似于
Array(
[0] => array //I don't want this index to be returned at all because the reservation_details weren't met
(
[Reservation] => array
(
id => 1
confirmation_number => 123
guest_id => 1
)
[ReservationDetail] => array
(
)
)
[1] => array
(
[Reservation] => array
(
id => 2
confirmation_number => 345
guest_id => 2
)
[ReservationDetail] => array
(
id => 5
reservation_id => 2
date => 2014-19-04
time => 13:00
room_id => 2
rate => 4.99
)
)
)
如您所见,找到的第一个结果的ReservationDetail不符合我的标准。它仍然返回Reservation表和ReservationDetail的空数组。
我是否还有其他方法可以搜索,以便在ReservationDetail与我的条件不匹配时根本不会返回预订表?
答案 0 :(得分:1)
$reservations = $this->Reservation->find('all', array(
'conditions' => array(
'Reservation.guest_id' => 1,
'ReservationDetail.date >=' => '2014-19-04'
),
'joins' => array(
array(
'table' => 'reservation_details',
'alias' => 'ReservationDetail',
'type' => 'inner',
'conditions' => array(
'ReservationDetail.reservation_id = Reservation.id'
)
)
),
'contain' => array(
'ReservationDetail'
)
));