2013-03-26 73 views
0

我剛剛繼承了一個項目,我需要重新工作一段代碼,以便無限滾動條的分頁仍然正常工作。複雜的CakePHP查詢重構

現在代碼抓住所有類別及其產品和列表。我需要對其進行編輯,以便只返回具有有效列表的產品類別。

下面是最終的工作代碼:

$catData = $this->find('all',array(
      'conditions' => array(
       'Indexer.type' => 'Category', 
       'Listing.listing_id IS NOT NULL' 
      ), 
      'joins' => array(
       array('table' => 'peeka_product_category_link', 
        'alias' => 'Link', 
        'type' => 'LEFT', 
        'conditions' => array(
         'Link.category_id = Category.category_id' 
        ) 
       ), 
       array('table' => 'peeka_products', 
        'alias' => 'Product', 
        'type' => 'LEFT', 
        'conditions' => array(
         'Product.product_id = Link.product_id' 
        ) 
       ), 
       array('table' => 'peeka_listings', 
        'alias' => 'Listing', 
        'type' => 'LEFT', 
        'conditions' => array(
         'Listing.product_id = Product.product_id', 
         'Listing.listing_end_date >=' => $date, 
         'Listing.listing_start_date <=' => $date, 
         "Listing.listing_status = 'Active'" 
        ) 
       ), 
      ), 
      'order' => 'Category.category_name ASC', 
      'limit' => $set_limit, 
      'fields' => array('Category.category_id, Category.category_name, Indexer.url'), 
      'group' => 'Category.category_id', 
      'recursive' => 0 
     )); 

編輯:感謝戴夫,這是現在的工作,我只是想將它張貼以供將來參考。也許它會幫助別人。

回答

1

「...只有產品擁有活動列表的產品類別返回 」。

「...一種將這三個查詢合併爲一個的方法,以便第一個類別 - > find()函數檢索所有有效數據。」

要檢索數據並根據相關模型的字段進行限制,您需要使用CakePHP's JOIN

如果沒有爲您編寫代碼,您很難回答您的問題,因此 - 給JOIN一個嘗試,然後回來再問一個更具體的問題,如果您有任何問題。

+0

我添加了一些連接,它似乎工作。現在是否有一種方法可以選擇不同,以便只返回類別的一個實例? – tmartin314 2013-03-26 21:01:43

+0

@whatshakin - 嘗試使用「GROUP BY」(或在Cake中,它是「group」)。 – Dave 2013-03-26 21:08:06