Zend framework 使用Zend框架获取类别和项目

Zend framework 使用Zend框架获取类别和项目,zend-framework,view,doctrine,foreach,Zend Framework,View,Doctrine,Foreach,目前我下面的代码运行良好,但有点过头了。在我的控制器中,我获取具有链接的类别以及数据库中的所有链接。 在我看来,我循环了所有类别,然后当我想在类别下添加链接时,我循环了数据库中的所有链接,而我应该只循环分配给当前类别的链接,但我不知道如何使用Zend Framework来做到这一点。有人能把我送到正确的方向吗。谢谢你抽出时间 控制器: public function indexAction() { $this->view->title = App_Tr

目前我下面的代码运行良好,但有点过头了。在我的控制器中,我获取具有链接的类别以及数据库中的所有链接。 在我看来,我循环了所有类别,然后当我想在类别下添加链接时,我循环了数据库中的所有链接,而我应该只循环分配给当前类别的链接,但我不知道如何使用Zend Framework来做到这一点。有人能把我送到正确的方向吗。谢谢你抽出时间

控制器:
    public function indexAction()
    {
        $this->view->title = App_Translate::translate('links_title');
        $this->view->headTitle($this->view->title, 'PREPEND');

        $linkCat = Doctrine_Query::create()
                    ->distinct()
                    ->from('LinkCategory lc')
                    ->innerJoin('lc.Link l WITH lc.id = l.link_category_id')
                    ->orderBy('lc.id')
                    ->execute();

        $links = Doctrine_Query::create()
                    ->from('Link')
                    ->execute();

        $this->view->linkCat = $linkCat;
        $this->view->links = $links;
    }
}
视图:


没有添加链接


您的问题实际上与Zend Framework无关。您正在使用条令而不是ZF获取数据


在您的情况下,我认为您应该能够使用
foreach($linkCat->linkas$Link)
循环特定类别中的链接,看看您如何使用innerJoin加载关系。

您的问题与Zend Framework没有真正的关系。您正在使用条令而不是ZF获取数据


在您的情况下,我认为您应该能够使用
foreach($linkCat->linkas$Link)
循环特定类别中的链接,查看如何使用innerJoin加载关系。

而不是执行这两个查询,您不能只执行一个吗

我看到您在第一个查询中有一个内部联接,所以我认为这是可能的;我想你有一个规则,说“一个链接在一个且只有一个类别中”,这是一个一对多的关系;也许手册的这一部分可以帮助你

我要做的可能是:

  • 从第一个查询中删除distinct,以获取每个查询及其类别的所有links+
    • 这是你想要的清单,不是吗
    • 此外,还可以按类别和链接排序,因此更易于显示(链接已按类别排序)
  • 删除第二个查询
我想这样做可以:

$linkCat = Doctrine_Query::create()
    ->from('LinkCategory lc')
    ->innerJoin('lc.Link l WITH lc.id = l.link_category_id')
    ->orderBy('lc.name, l.name')
    ->execute();
(但未测试:可能需要更多的调谐)


一旦有了这些数据,就将其传递给视图,在那里进行循环——记住,Lonk已经按类别进行了排序:

  • 显示第一个类别的名称;将其存储在变量中
  • 在链接上循环
    • 如果当前链接的类别与上一个链接的类别不同(存储在变量中),则表示它是一个类别的结束,新类别的开始
    • 继续
  • 当您到达链接的末尾时,它也是最后一个类别的末尾
我会说,这应该是可行的(当然,您仍然需要编写代码——但想法就在这里)


作为旁注:您使用的是条令类、编写DQL以及控制器中的所有内容——这完全不是问题所在:所有这些都应该放在模型类中,而不是控制器中



玩得开心

不要做这两个查询,你不能只做一个吗

我看到您在第一个查询中有一个内部联接,所以我认为这是可能的;我想你有一个规则,说“一个链接在一个且只有一个类别中”,这是一个一对多的关系;也许手册的这一部分可以帮助你

我要做的可能是:

  • 从第一个查询中删除distinct,以获取每个查询及其类别的所有links+
    • 这是你想要的清单,不是吗
    • 此外,还可以按类别和链接排序,因此更易于显示(链接已按类别排序)
  • 删除第二个查询
我想这样做可以:

$linkCat = Doctrine_Query::create()
    ->from('LinkCategory lc')
    ->innerJoin('lc.Link l WITH lc.id = l.link_category_id')
    ->orderBy('lc.name, l.name')
    ->execute();
(但未测试:可能需要更多的调谐)


一旦有了这些数据,就将其传递给视图,在那里进行循环——记住,Lonk已经按类别进行了排序:

  • 显示第一个类别的名称;将其存储在变量中
  • 在链接上循环
    • 如果当前链接的类别与上一个链接的类别不同(存储在变量中),则表示它是一个类别的结束,新类别的开始
    • 继续
  • 当您到达链接的末尾时,它也是最后一个类别的末尾
我会说,这应该是可行的(当然,您仍然需要编写代码——但想法就在这里)


作为旁注:您使用的是条令类、编写DQL以及控制器中的所有内容——这完全不是问题所在:所有这些都应该放在模型类中,而不是控制器中


玩得开心