如何在控制器中获取相关项(Symfony2.8)

时间:2017-11-03 16:28:46

标签: php symfony doctrine

对于这个问题,我的数据库中有3个实体:
案例到行:1个案例到多行(1个案例有n行)
贷款行:1行至多笔贷款(1行有n笔贷款)

我希望在我的控制器中按ID获取一个Case(Dosier),然后到foreach行,然后预先获得每笔贷款。 因此,对于每个贷款对象,我想执行一些计算并收集所有这些数据。

我如何访问贷款对象,为我的计算做下一件事(例如$ loan-> getCapital(),$ loan-> getDuration()?

我试过这样的方式:

    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        $user = $this->getUser();

        $dosiers = $this->getDoctrine()
            ->getRepository('AppBundle:Dosier')
            ->createQueryBuilder('e')
            ->select('e')
            ->where('e.userId = :id')
            ->andwhere('e.isActive = 1')
            ->orderBy('e.id', 'DESC')
            ->setParameters(array('id'=> $user))
            ->getQuery()
            ->getResult();

      foreach ($line as $dosiers->getLines()) {
        foreach ($loan as $line->getLoans()) {
        echo $loan->getName();
    }
}


        return $this->render('AppBundle:default:index.html.twig', array(
            'dosiers' => $dosiers
        ));
    }//indexAction

但它给了我错误:

  

编译错误:在写上下文中不能使用方法返回值

1 个答案:

答案 0 :(得分:1)

啊,我找到了解决方案:

此代码:

$dosiers = $this->getDoctrine()
            ->getRepository('AppBundle:Dosier')
            ->createQueryBuilder('e')
            ->select('e')
            ->where('e.userId = :id')
            ->andwhere('e.isActive = 1')
            ->orderBy('e.id', 'DESC')
            ->setParameters(array('id'=> $user))
            ->getQuery()
            ->getResult();

返回与该条件匹配的对象数组,而不是返回一个对象。

所以,我在test:

中更改了test的查询

$ dosiers = $ em-> getRepository(' AppBundle:Dosier') - > findOneBy(array(' id' => 15)); 和循环:

      foreach ($dosiers->getLines() as $line) {
        foreach ($line->getLoans() as $loan) {
        echo $loan->getName();
    }
}

现在它有效。接下来,只需要为操作添加新参数$id,而不是常量' 15'在查询中放置$id