2013-07-08 56 views
0

我有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(); 
+0

有沒有人這方面有任何想法?我把我的頭從桌子上敲了出來:( –

回答

0

預訂已經綁定到模型中的清單上嗎?那麼就不需要使用bindModel了。

只需添加您Booking.checkin之間$至$和從到$條件數組

+0

是的,這就是我想我必須做的,但是當我這樣做時,我得到了「未找到列:1054未知列'Booking.checkin'in'where clause'」。閱讀和我發佈在曲中的鏈接表明,許多關係不會像我認爲的那樣返回結果 –