在cakephp3的视图中列出每个类别的文章
我有两个表在cakephp3的视图中列出每个类别的文章,cakephp,associations,cakephp-3.x,Cakephp,Associations,Cakephp 3.x,我有两个表Category和Articles。我想在cakephp3的articlesindex.ctp中列出每个类别的文章。我在控制器中使用了两个查询,一个用于列出类别,另一个用于列出每个类别的文章。这是两个表的内容: |--------------------|----------------------| |类别|物品| |--------------------|----------------------| |idCategory | idArticles| |参考|标题| ||说明|
Category
和Articles
。我想在cakephp3的articlesindex.ctp
中列出每个类别的文章。我在控制器中使用了两个查询,一个用于列出类别,另一个用于列出每个类别的文章。这是两个表的内容:
|--------------------|----------------------|
|类别|物品|
|--------------------|----------------------|
|idCategory | idArticles|
|参考|标题|
||说明|
||创建|
|| Category.idCategory|
|--------------------|----------------------|
下面是我在articlesController.php
$category=$this->paginate(TableRegistry::get('category')->find('all');
$this->set(压缩('category');
$article=$this->Articles
->查找('all',数组('order'=>array('Created DESC'))
->包含(['Category'])
->其中(['Category.idCategory'='idCategory']);
在我的index.ctp
模板中,我使用了两个foreach循环:
foreach($c类){
h($c->参考)
foreach($a商品){
h($a->头衔)
}
}
但当我显示时,所有文章都显示在第一个类别中,其他类别为空,而文章有不同的category\u idCategory
。
我的请求有问题吗?您的查询有问题。你有一个所有类别的单一列表,然后是所有文章的单一列表。而
->where(['Category.idCategory'=='idCategory'])
正在使用PHP比较运算符,因此这将解析为->where([false])
,肯定不是您想要的
您的文章查询中使用了contain
,但实际上应该是在类别查询中,然后根本没有文章查询:
$categories = $this->paginate(TableRegistry::get('Category')->find('all')->contain(['Article']);
此外,Cake标准将使用类别
和文章
作为表名;你有没有理由不这么做?总的来说,这样做会让你的生活更轻松
您的索引将如下所示:
foreach($categories as $category) {
h($category->reference);
foreach ($category->article as $article) {
h($article->title);
}
}
非常感谢你,格雷格·施密特。现在很好用