【发布时间】:2016-10-31 20:16:18
【问题描述】:
我使用 CakePHP 2.0 已经有一段时间了,我正在尝试迁移到 3.0。大部分都很好,但我对如何从表中检索数据并将其显示在视图中感到困惑。
假设我的数据库包含菜单和菜单项。每个 Menu 可以有多个 Menuitem(每个 Menuitem 记录都有字段 menu_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 ...
}
在 Cake 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,但这些也没有用。我哪里错了?
编辑
如果我这样做debug($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 而不是 $menu 然后在你的视图中 var_dump $menulist 看看它是什么
-
对不起,是的,我确实有 $menulist,我在上面打错了。
标签: cakephp cakephp-3.0