在cakephp3的视图中列出每个类别的文章

在cakephp3的视图中列出每个类别的文章,cakephp,associations,cakephp-3.x,Cakephp,Associations,Cakephp 3.x,我有两个表Category和Articles。我想在cakephp3的articlesindex.ctp中列出每个类别的文章。我在控制器中使用了两个查询,一个用于列出类别,另一个用于列出每个类别的文章。这是两个表的内容: |--------------------|----------------------| |类别|物品| |--------------------|----------------------| |idCategory | idArticles| |参考|标题| ||说明|

我有两个表
Category
Articles
。我想在cakephp3的articles
index.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);
    }
}

非常感谢你,格雷格·施密特。现在很好用