2016-07-20 92 views
1

我有兩個模型,名爲Post和Comment,它們通過Post鏈接有很多評論和評論belongsTo Post。 我想獲取每個前五個評論的所有帖子。我會用這個代碼:Cakephp 3 - 限制()和包含的模型

$this->Posts->find('all') 
    ->contain([ 
     'Comments' => function($q) { 
      return $q 
       ->order('created ASC') 
       ->limit(5); 
} 
]); 

這個工作與limit()不正確。請幫忙解決這個問題。 我用這個例子: How to limit contained associations per record/group? 我試圖像這樣(在Post模型):

$this->hasOne('TopComments', [ 
    'className' => 'Comments', 
    'strategy' => 'select', 
    'conditions' => function (\Cake\Database\Expression\QueryExpression $exp, \Cake\ORM\Query $query) { 
     $query->leftJoin(
      ['CommentsFilter' => 'comments'], 
      [ 
       'TopComments.post_id = CommentsFilter.post_id', 
       'TopComments.created < CommentsFilter.created' 
      ]); 
     return $exp->add(['CommentsFilter.id IS NULL']); 
    } 
]); 

在帖子控制器:

$this->Posts->find('all') 
    ->contain([ 
     'TopComments' => function($q) { 
      return $q 
       ->order('TopComments.created ASC') 
       ->limit(5); 
} 
]); 

可惜,這是行不通的。我不知道我錯在哪裏。

+0

的可能的複製[如何限制包含每個記錄/組關聯?](HTTP:/ /stackoverflow.com/questions/30241975/how-to-limit-contained-associations-per-record-group) – arilia

回答

1

你應該試試這個

在模型中

$this->hasMany('Comments', [ 
    'foreignKey' => 'post_id' 
]); 

在你的控制器

$this->Posts->find() 
    ->contain([ 
     'Comments' => function($q) { 
      return $q 
       ->order(['created' =>'ASC']) 
       ->limit(5); 
} 
]); 
+0

不幸的是它不起作用。 CakePHP是一個功能強大的框架,但有時會發生這樣的情況:基本的東西不能按照他們應該的方式工作。 – lupi

+0

謝謝,你我一樣的時間 –