我已經使用了CakePHP 2.0很長一段時間了,我正試圖遷移到3.0。大部分情況都很好,但是我非常困惑於如何從表格中檢索數據並將其顯示在視圖中。如何在CakePHP 3.0中顯示檢索到的數據?
假設我的數據庫包含菜單和菜單項。每個菜單可以有多個菜單項(每個菜單項記錄都有菜單項ID)。
所以,CakePHP的2.0我將不得不如下:
Model:
Menu hasMany Menuitem
Controller:
$this->set->recursive = 1;
$menu = $this->Menu->findById($menuid);
View:
foreach($menu['Menuitem'] as $item) {
... display item ...
}
餅3.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.menuitems和$ menu-> menuitems,但那些都不起作用。我哪裏錯了?謝謝!
編輯:對不起消失了幾天。如果我做調試($ menulist);我得到如下:
(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'
}
]
不應該說,它是@menulist而不是$菜單,然後在您的視圖的var_dump $菜單列表,看看它是什麼 –
對不起,是的,我有$菜單列表,我在上面打印錯誤。 – Sharon