список статей для каждой категории в представлении в cakephp3 - PullRequest
0 голосов
/ 06 ноября 2019

у меня есть две таблицы Category и Articles. Я хочу перечислить статьи каждой категории в статьях index.ctp в cakephp3. Я использовал два запроса в моем контроллере, один для вывода списка категорий, а другой для вывода списка статей для каждой категории. это содержимое двух таблиц:

|--------------------|----------------------|
|  Category          |  Articles            |
|--------------------|----------------------|
| idCategory         | idArticles           |
| Reference          | Title                |
|                    | Description          |
|                    | Created              |
|                    | Category.idCategory  |
|--------------------|----------------------|

ниже мой код в articlesController.php

$category = $this->paginate(TableRegistry::get('Category')->find('all'));
$this->set(compact('category'));

$article = $this->Articles
    ->find('all',array( 'order' => array('Created DESC')))
    ->contain(['Category'])
    ->where(['Category.idCategory' == 'idCategory']);

в моем шаблоне index.ctp я использовал два цикла foreach:

foreach($category as $c) {
    h($c->reference)

    foreach ($article as $a) {
        h($a->title)
    }
}

но когда я показываю, все статьи появляются в первой категории, а остальные категории пусты, в то время как статьи имеют различия Category_idCategory. Что-то не так в моем запросе?

1 Ответ

0 голосов
/ 10 ноября 2019

Ваши запросы неверны. У вас есть один список всех категорий, а затем один список всех статей. И ->where(['Category.idCategory' == 'idCategory']) использует оператор сравнения PHP, так что это синтаксический анализ ->where([false]), конечно, не то, что вы хотите.

В вашем запросе к статье используется contain, но на самом деле это должно бытьв запросе категории, а затем в запросе статьи вообще нет:

$categories = $this->paginate(TableRegistry::get('Category')->find('all')->contain(['Article']);

Кроме того, стандарты Cake будут использовать Categories и Articles в качестве имен таблиц здесь;есть ли причина, по которой вы не следуете этому? Это в целом облегчит вашу жизнь.

Тогда ваш индекс будет примерно таким:

foreach($categories as $category) {
    h($category->reference);

    foreach ($category->article as $article) {
        h($article->title);
    }
}
...