2016-07-13 2 views
0

私はCakePHP 3.2で作業しています。私は2つのテーブルを持っていますcategoriessubcategoriessubcategoriescategoriesと外部キーcategory_idに関連付けられています。CakePHP 3:find( 'all')とともに関連データを表示

これらの2つのテーブルを使用してナビゲーションを作成する必要があります。これはこのように見えるでしょう

-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.phpnavigation.ctp

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

で次に

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

で しかし、これは私がそれぞれ属するカテゴリの下にサブカテゴリを印刷する必要が唯一のcategory->titlesubcategories

を印刷します。

答えて

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

1

あなたnavigation.ctpスニペットにタイプミスがあり、また、

echo $menu_cateory->title; 

、作りますカテゴリに$containedModelsが正しく設定されていること、カテゴリとサブカテゴリにhasManybelongsToの関連付けが正しく設定されていること、正しくContainableの動作が含まれていることを確認してください。

+0

'echo $ menu_category-> title'には何がありますか? Categoriesテーブルには、私が印刷している 'title'カラムがあります。これはうまく印刷されています –

+0

あなたのスニペットで "$ menu_cateory"と書いてありますが、文字gがありません。それがソースファイルのコードであれば、それは確かに構文エラーであるため、別のものが印刷されています。私のコメントの要点は、モデルを正しく関連付けていることを確認することです。 – Caius

+0

オハイオ州、申し訳ありませんが、コードはソースから直接ではありませんでした。これは型付きされたもので、型付きエラーでした。 –

関連する問題