CakePHP 3:显示相关数据以及查找('全部')

时间:2016-07-13 18:09:53

标签: cakephp associations cakephp-3.2

我正在使用CakePHP 3.2。我有两个表categoriessubcategories,其中subcategoriescategories与外键category_id相关联。

我必须使用这两个表构建下拉导航。所以它看起来像这样

-Menu
|- Category_1
   |- Category_1_subcategory_1
   |- Category_1_subcategory_2
   |- Category_1_subcategory_3
|- Category_2
   |- Category_2_subcategory_1
   |- Category_2_subcategory_2
|- etc

为此,这就是我所做的。 在AppController.php

// set navigation menu
$this->loadModel('Categories');
$menu_categories = $this->Categories->find('all', [
  'contain' => ['Subcategories'],
]);
$this->set('menu_categories', $menu_categories);

然后在navigation.ctp

$foreach($menu_categories as $menu_category):
   echo $menu_category->title;
   foreach($menu_category->Subcategories as $subcategory):
      echo $subcategory->title;
   endforeach;
endforeach;

但这仅打印category->title而不是subcategories

我必须在每个所属类别下打印子类别。

2 个答案:

答案 0 :(得分:1)

您的navigation.ctp片段中有一个拼写错误

echo $menu_cateory->title;

此外,请确保您已在类别中正确设置$containedModels,以及您在类别和子类别中正确设置hasManybelongsTo关联,以及您已正确包含Containable行为。

答案 1 :(得分:0)

确保在模型中定义关联。

类别模型:

$this->hasMany(
   'Subcategory', [
        'className' => 'Subcategory',
        'foreignKey' => 'category_id'
]);

子类别模型:

$this->belongsTo(
   'Category', [
        'className' => 'Category',
        'foreignKey' => 'category_id'
]);

http://book.cakephp.org/3.0/en/orm/associations.html