2011-10-03 55 views
1

我想在一個分頁查詢中使用中容納。代碼如下,完整。CakePHP的中容納和PAGINATE - 深協會沒有出現

$this->paginate = array(
     'conditions'=>array(
      'Track.pending'=>0, 
      'Track.status'=>1 
     ), 
     'contain'=>array(
      'Vote'=>array(
       'conditions'=>array(
        'Vote.created >'=>$start, 
        'Vote.created <='=>$end 
       ), 
       'fields'=>array(
        'Vote.vote_type_id', 
        'Vote.id', 
       ), 
      ), 
      'Artist'=>array(
       'Image'=>array(
        'fields'=>array(
         'Image.name' 
        ) 
       ), 
       'Genre'=>array(
        'fields'=>array(
         'Genre.name' 
        ) 
       ), 
       'fields'=>array(
        'Artist.name', 
        'Artist.id', 
        'Artist.slug', 
        'Artist.city', 
        'Artist.genre_id' 
       ) 
      ) 
     ), 
     'fields'=>array(
      'Track.id', 
      'Track.slug', 
      'Track.name', 
      'Track.featured', 
      'Track.plays', 
      'Track.vote_score', 
      'Track.vote_week_score', 
      'Track.video', 
      'Track.status', 
      'Track.created' 
     ), 
     'order'=>$order 
    ); 

直接關聯(投票和藝術家)被選中,但圖像和流派不是。這裏是正在生成的SQL:

SELECT COUNT(*) AS `count` FROM `tracks` AS `Track` LEFT JOIN `artists` AS `Artist` ON (`Track`.`artist_id` = `Artist`.`id`) WHERE `Track`.`pending` = 0 AND `Track`.`status` = 1 

SELECT `Track`.`id`, `Track`.`slug`, `Track`.`name`, `Track`.`featured`, `Track`.`plays`, `Track`.`vote_score`, `Track`.`vote_week_score`, `Track`.`video`, `Track`.`status`, `Track`.`created`, `Artist`.`name`, `Artist`.`id`, `Artist`.`slug`, `Artist`.`city`, `Artist`.`genre_id` FROM `tracks` AS `Track` LEFT JOIN `artists` AS `Artist` ON (`Track`.`artist_id` = `Artist`.`id`) WHERE `Track`.`pending` = 0 AND `Track`.`status` = 1 ORDER BY `Track`.`vote_week_score` DESC LIMIT 20 

SELECT `Vote`.`vote_type_id`, `Vote`.`id`, `Vote`.`track_id` FROM `votes` AS `Vote` WHERE `Vote`.`created` > '2011-09-26' AND `Vote`.`created` <= '2011-10-03' AND `Vote`.`track_id` IN (24, 35, 31, 25, 27, 34, 56, 58) 

蛋糕沒有拿起更深的關聯。這是Containable + paginate的限制還是我缺少一些東西?

謝謝!

+0

你試過獲取數據,而PAGINATE?我的猜測是,你也不會在那裏得到它。我不確定這是否有幫助,但我經常發現JOIN的工作比遏制更好 - 不知道爲什麼。 – Dave

+0

@戴夫,謝謝你,是的,我有代碼的其他地方說出來得到了相同的數據,而無需分頁,和它的作品,我想它。 – Will

回答

-2

也許問題出在你的控制器$使用,在你擁有了它在AppController的設置情況。

例:
比方說,你的控制器的ProductsController,你的模型是產品和數據庫表的產品。你也許在你的模型中設置了某種關聯。

如果不設置$使用的控制器,但將其設置在AppController中,蛋糕正確假定數據庫表和workes罰款。但是他不會查找您的Model文件,因爲它不會出現在$ uses(AppController中定義的文件)中。

所以,如果你在你的控制器寫它的工作:

public $uses = array('Yourmodel'); 

另外:

  1. 您不必設置「遞歸」,這就是爲什麼包含存在
  2. 唐「忘記在含有離來獲取foreignKeys:產品‘字段’=>數組(」 CATEGORY_ID');類別「領域」 =>「PRODUCT_ID」
+0

你不應該使用「使用」,你應該用「loadModel」。另外,不需要顯式加載關聯的模型,因爲蛋糕應該照顧到這一點。這裏加載額外的模型是沒用的。包含已知不爲'hasMany'關係工作,所以在這裏使用被大量鄙視的'遞歸'是唯一的解決方案(確保至少使用2級或者你也不會獲得所有數據)。 –

2

檢查是否已爲模型的遞歸屬性值爲零。

$this->Post->recursive = 0; 

撞頭後數小時除去上述行固定對我來說

0

請務必附上的行爲:

$this->ModelName->Behaviors->attach('Containable');