我有我的问题,我希望有人可以帮助我。我认为这段代码是正确的,但它不起作用。下面是我的代码,它是我的 CakePHP 2.2.2 站点的一个函数,代码的主要目的是从数据库结果中生成一个菜单系统。问题在于我的 foreach 循环,它不会循环。$Key 所做的只是返回值 2(此时表中的三个记录)。所以当我显示/echo/debug $Menu 时,我得到的唯一结果是存储在数据库中的最后一个结果。
我知道 SQL 命令是正确的,如果已调试/回显,则显示所有三个结果。这个循环的想法是让它计算结果,这样我就可以对选定的字段进行检查。我哪里错了?
function MenuSystem() {
$this->loadModel('Menu');
$MenuSQL = $this->Menu->find('all', array('conditions' => array('active' => true)));
foreach ($MenuSQL as $Key=>$Value) {
$MenuSystem = $MenuSQL[$Key];
$this->Menu = $MenuSystem;
}
}
非常感谢,格伦。
更新 :::
下面是我的函数,现在我的 foreach 循环现在可以工作了,不知道我做错了什么,但我知道它可以工作。您可以看到我用于测试的 print_r 命令,如果我使用它,那么我的数据库中的所有链接都会在屏幕上打印/回显,并且一切正常。但是,如果我尝试从另一个控制器调用 $this->Menu,那么只有最后一条记录会在屏幕上回显。我已经将 $this->Menu 移到了 foreach 循环之外,但它没有任何区别,无论是在循环内部还是外部,它仍然只回显最后一条记录,而不是全部三个。那么我做错了什么?
function MenuSystem() {
$this->loadModel('Menu');
$SiteBase = '/projects/cake/';
$MenuSQL = $this->Menu->find('all', array('conditions' => array('active' => true)));
foreach ($MenuSQL as $key => $Value) {
$MenuAccessLevel = $MenuSQL[$key]['Menu']['roles_id'];
if ($MenuAccessLevel == 1) {
$Path = $MenuSQL[$key]['Menu']['path'];
$Title = $MenuSQL[$key]['Menu']['title'];
$MenuSys = "<a href=\" " . $SiteBase . $Path . " \">" . $Title ."";
} else {
print ("Admin");
}
//print_r($MenuSys);
} //End of Foreach Loop
$this->Menu = $MenuSys;
} //End of function MenuSystem