저는 Cake 2.3.8을 사용하고 있고 데이터를 효율적으로 검색하는 데 어려움을 겪고 있습니다. 내가 찾고있는 데이터를 가져오고 있지만 containables 때문에 필요하지 않은 것들도 많이 있습니다. 예를 들어CakePHP containable searches
나는 다음과 같은 모델
//Reservation model
public $actsAs = array('Containable');
public $hasMany = array('ReservationDetail');
//ReservationDetail model
public $actsAs = array('Containable');
public $belongsTo = array('Reservation');
이제 날짜가 19보다 크거나 같다 예약에 대한 검색을 수행와
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_details 테이블에 저장됩니다.
$reservations = $this->Reservation->find('all', array(
'conditions' => array(
'Reservation.guest_id' => '1'
),
'contain' => array(
'ReservationDetail' => array(
'conditions' => array(
'ReservationDetail.date >=' => '2014-19-04'
)
)
)
));
이 검색은 예약 # 1에 대해 ReservationDetail의 빈 배열 인 Reservation # 1을 반환합니다. 문제는 그 어떤 정보도 원하지 않는다는 것입니다. 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. ReservationDetail에 대해서는 여전히 Reservation 테이블과 빈 배열을 반환합니다.
ReservationDetail이 내 기준과 일치하지 않는 경우 예약 테이블이 전혀 반환되지 않도록 검색 할 수있는 다른 방법이 있습니까?
이 경우 데이터베이스 정규화 프로세스에 대해 다시 생각해 봐야합니다. –
@FazalRasel thats 내가해야 할 일이 무엇인지 알았습니다. 테이블 구조에 대한 제안이 있습니까? 날짜별로 정렬하는 것이 내가 가진 유일한 문제입니다. 준비된 진술서는 괜찮을까요? – user3476345
글쎄, 아직도 할 수있어 ... 테이블에 합류하기 만하면 돼 ... –