繁体   English   中英

主义查询生成器结果:未正确循环

[英]Doctrine Query Builder Result: not looping correctly

我不确定这是否做得不正确,但这给了我一个错误:

我有2个实体:Task和TaskUser。 它们通过一对多连接。

我想做的是这样的:

foreach($tasks as $task){
echo $task->getTitle;
echo $task->getTaskUser()->getFirstName();
}

这是我在任务存储库中的查询:

    public function findTasksByUsers($user = false)
{

    if($user){

    $qb = $this->_em->createQueryBuilder();

    $qb
    ->select('t', 'tu')
    ->from('\Entities\Task', 't')
    ->leftJoin('\Entities\TaskUser', 'tu',  \Doctrine\ORM\Query\Expr\Join::WITH, 't.id = tu.task')
    ->where('tu = :user')
    ->setParameter('user', $user)
    ->orderBy('t.createDate', 'DESC');

    return $qb->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);

    }

}

当我执行此循环时:

$tasks = $this->em->getRepository('\Entities\Task')->findTasksByUsers($user);

foreach($tasks as $task){
        echo $task->getTitle();
    }

我得到第一个任务的标题,然后得到一个类似这样的错误:

Title of first task
Fatal error: Call to undefined method Entities\TaskUser::getTitle() in D:\sites\db\application\controllers\TasksController.php on line 35

知道为什么会这样吗? 谢谢!

$qb->select('t', 'tu')

当您同时选择两个实体时,问题就出在这里。

如果只希望Task实体按如下所示修改DQL

$qb->select('t')

但是,对我来说,您只能采用这种方式(在您的控制器中;如果您不喜欢控制器,请使用DI来访问实体管理器)

//retrieve all TaskUser object
$em = $this->getDoctrine()->getManager();
$tu_repo = $em->getRepository('YourBundleName:TaskUser');
$tu_array_collection = $tu_repo->findBy(array('user'=>$user));
foreach ($tu_array_collection as $tu) {
  $first_name = $tu->getFirstName();
  foreach ($tu->getTasks() as $task) {
    echo $first_name;
    echo $task->getTitle();
  }
}

当然,您可能需要使用正确的findBy数组和TaskUser实体的正确方法来调整代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM