我有3個表內有協會如下: 房源的hasMany預訂 上市的hasMany special_prices的CakePHP的hasMany查詢問題
表:
預訂 .ID,bookings.start,bookings.stop, bookings.listing_id
special_prices .ID,special_prices.start,special_prices.stop,special_prices.price,special_prices.listing_id,
當然還有清單表。
這些協會都在模型文件中設置蛋糕烘烤禮貌。用戶可以根據區域,開始日期和結束日期搜索所有列表。我試圖得到一組結果,只有當列表可能有任何預訂日期的開始日期時才返回列表。
在我的搜索功能,我有:
$conditions = array(
"AND" => array(
"OR" => array(
"Listing.address_one LIKE" => "%".$area."%",
"Listing.address_two LIKE" => "%".$area."%",
"Listing.city LIKE" => "%".$area."%",
"Listing.postcode LIKE" => "%".$area."%",
"Listing.title LIKE" => "%".$area."%",
),
)
);
$this->Listing->bindModel(array('hasMany' => array('Booking' => array('conditions' =>array('Booking.checkin BETWEEN ? AND ?' => array($to, $from))))));
$data = $this->paginate('Listing', $conditions);
$this->set('data', $data);
我讀到這裏:http://ibndawood.com/2011/10/how-to-filter-hasmany-related-model-records-in-cakephp-when-using-find-function/的另一種選擇是使用
$this->Listing->hasMany['Booking']['conditions'] = array('Booking.checkin BETWEEN ? AND ?' => array($to, $from));
但不幸的是這兩個剛剛返回數據庫中的所有條目這匹配該區域,但完全忽略了似乎的預訂表。我試過使條件成爲
'Booking.id' => '5'
要測試,但它也忽略了這一點。
任何人都可以爲我闡明這一點。文檔中沒有太多示例,什麼是不適合我的。
編輯
我已經成功地發現,因爲CakePHP的不自動加入的hasMany關係,當你分頁,因此我不得不添加一些代碼來告訴它加入預訂表格。
現在它似乎與預訂表連接好了,但它返回了多組列表。任何人都可以看看並幫助我解決這個問題嗎?以下是我現在擁有的:
$conditions = array(
"OR" => array(
"Listing.address_one LIKE" => "%".$area."%",
"Listing.address_two LIKE" => "%".$area."%",
"Listing.city LIKE" => "%".$area."%",
"Listing.postcode LIKE" => "%".$area."%",
"Listing.title LIKE" => "%".$area."%",
)
);
$this->paginate = array(
'joins'=>array(
array(
'table'=>'bookings',
'alias'=>'Booking',
'type' =>'inner',
'conditions' =>array('Booking.checkin NOT BETWEEN ? AND ?' => array($to, $from))
)
),
'conditions'=> $conditions
);
$data = $this->paginate();
有沒有人這方面有任何想法?我把我的頭從桌子上敲了出來:( –