条令查询生成器结果:循环不正确


Doctrine Query Builder Result: not looping correctly

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

我有两个实体:任务和任务用户。它们通过onetoMany连接。

我想做的是:

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实体的正确方法来调整代码