2016-10-31 4 views
0

私はかなり長い間CakePHP 2.0を使ってきましたが、私は3.0に移行しようとしています。大部分は問題ありませんが、テーブルからデータを取得してビューに表示する方法には本当に混乱しています。取得したデータをCakePHP 3.0に表示する方法を教えてください。

私のデータベースにはメニューとメニューが含まれています。各メニューには、多くのメンテーム(各Menuitemレコードにはmenu_idフィールドがあります)を持つことができます。ケーキ3.0で

Model: 
Menu hasMany Menuitem 

Controller: 
$this->set->recursive = 1; 
$menu = $this->Menu->findById($menuid); 

View: 
foreach($menu['Menuitem'] as $item) { 
... display item ... 
} 

が、私はこれを再現しようとしています:

ので、CakePHPの2.0に私は次なければならなかったでしょう。だから、私は持っている:

In Model/Table/MenusTable.php: 
    public function initialize(array $config) 
    { 
     $this->hasMany('Menuitems', [ 
         'sort' => ['Menuitems.order' => 'ASC'] 
     ]); 
    } 

In Controller: 
$menus= TableRegistry::get('Menus'); 
$query = $menus->find('all') 
        ->contain(['Menuitems'); 
$menulist= $query->toArray(); 
$this->set(compact('menulist')); 

私は今どのようにビューでこれを表示するのですか?

私がしようとした場合:

foreach($menu['Menuitem'] as $item) 

、私はエラー "未定義のインデックス:メニューアイテムを" 取得します。

次に、私は$ menu.menuuitemsと$ menu-> menuitemsを試しましたが、それらもうまくいきませんでした。どこが間違っていますか?ありがとう!

編集:数日のうちに消えてしまって申し訳ありません。もし私がデバッグをしたら($ menulist);私は、次を得る:ちょうどあなたの設定した変数をデバッグ

foreach($menulist->Menuitems as $item) 
{ 
    // your logic here 
} 

(int) 0 => object(Cake\ORM\Entity) { 
    'id' => (int) 1, 
    'name' => 'Main', 
    'menuitems' => [ 
     (int) 0 => object(Cake\ORM\Entity) { 

      'id' => (int) 1, 
      'subsite_id' => (int) 1, 
      'page_id' => (int) 1, 
      'parentmenuitem_id' => null, 
      'nav_order' => (int) 1, 
      'nav_width' => null, 
      'children' => [], 
      '[new]' => false, 
      '[accessible]' => [ 
       '*' => true 
      ], 
      '[dirty]' => [], 
      '[original]' => [], 
      '[virtual]' => [], 
      '[errors]' => [], 
      '[invalid]' => [], 
      '[repository]' => 'Menuitems' 

     }, 
     (int) 1 => object(Cake\ORM\Entity) { 

      'id' => (int) 2, 
      'subsite_id' => (int) 1, 
      'page_id' => (int) 2, 
      'parentmenuitem_id' => null, 
      'nav_order' => (int) 2, 
      'nav_width' => null, 
      'children' => [ 
       (int) 0 => object(Cake\ORM\Entity) { 

        'id' => (int) 9, 
        'subsite_id' => (int) 1, 
        'page_id' => (int) 9, 
        'parentmenuitem_id' => (int) 2, 
        'nav_order' => (int) 1, 
        'nav_width' => null, 
        '[new]' => false, 
        '[accessible]' => [ 
         '*' => true 
        ], 
        '[dirty]' => [], 
        '[original]' => [], 
        '[virtual]' => [], 
        '[errors]' => [], 
        '[invalid]' => [], 
        '[repository]' => 'Children' 

       }, 
       (int) 1 => object(Cake\ORM\Entity) { 

        'id' => (int) 10, 
        'subsite_id' => (int) 1, 
        'page_id' => (int) 13, 
        'parentmenuitem_id' => (int) 2, 
        'nav_order' => (int) 2, 
        'nav_width' => null, 
        '[new]' => false, 
        '[accessible]' => [ 
         '*' => true 
        ], 
        '[dirty]' => [], 
        '[original]' => [], 
        '[virtual]' => [], 
        '[errors]' => [], 
        '[invalid]' => [], 
        '[repository]' => 'Children' 

       }, 
       (int) 2 => object(Cake\ORM\Entity) { 

        'id' => (int) 11, 
        'subsite_id' => (int) 1, 
        'page_id' => (int) 14, 
        'parentmenuitem_id' => (int) 2, 
        'nav_order' => (int) 3, 
        'nav_width' => null, 
        '[new]' => false, 
        '[accessible]' => [ 
         '*' => true 
        ], 
        '[dirty]' => [], 
        '[original]' => [], 
        '[virtual]' => [], 
        '[errors]' => [], 
        '[invalid]' => [], 
        '[repository]' => 'Children' 

       } 
      ], 
      '[new]' => false, 
      '[accessible]' => [ 
       '*' => true 
      ], 
      '[dirty]' => [], 
      '[original]' => [], 
      '[virtual]' => [], 
      '[errors]' => [], 
      '[invalid]' => [], 
      '[repository]' => 'Menuitems' 

     }, 
    ], 
    '[new]' => false, 
    '[accessible]' => [ 
     '*' => true 
    ], 
    '[dirty]' => [], 
    '[original]' => [], 
    '[virtual]' => [], 
    '[errors]' => [], 
    '[invalid]' => [], 
    '[repository]' => 'Subsites' 

} 

]

+1

はずのは –

+0

申し訳ありませんが、はい、私は上記の入力ミス$メニューリストを、持っています。 – Sharon

答えて

1

何( 'メニューリスト')に基づいて設定した変数を、あなたのforeachのは次のようになります。データがどのように表示されるかを確認します。クエリによっては異なる場合があります。

+0

当時の返信を忘れましたが、これは助けてくれました、ありがとうございます! – Sharon

1

返されるデータはどのように見えますか? debug($menulist)を使用して変数をチェックするか、またはdebugkitのset view変数を調べる必要があります。 CakePHPの3で

は、モデルが小文字蛇同棲項目(ないCakePHPの2のようなモデルの別名)として、およびhasMany団体のための複数形として、あなたのデータに表示する必要があります含まれているので、私はあなたの場合はこのようなものであることを期待します - それは代わりに$メニューの@menulistしてから、ビューのvar_dumpの$のメニューリストで、それが何であるかを見ることが

foreach ($menulist['menuitems'] as $item): 
    // Output your menu item 
endforeach; 
+1

最初のものとは別に、モデル名に大文字がない場合、インデックス名には_はありません。この例では、MenuItemsではなくMenuitemsを明確に示しています。 – JvO

+0

@JvOがよく目にしたので、私はそれに応じて私の答えを更新しました。 – drmonkeyninja

関連する問題