如何更改Query以包含来自连接表的数据?

时间:2017-10-20 20:44:36

标签: symfony doctrine symfony-3.3

我有简单的实体:

id
username
guard

“guard”是来自同一实体的另一个用户的id。我必须用简单的表格渲染视图:

username | name of guard
-------------------------
John     | Bob

我试图通过查询来做到这一点:

$ur = $this->getDoctrine()->getRepository(User::class)->createQueryBuilder('u')
            ->leftJoin(User::class, 'u2', \Doctrine\ORM\Query\Expr\Join::WITH, 'u.guard = u2.id')
            ->getQuery()
            ->getResult();

但它只给我id和用户名,没有加入数据。 我知道整个查询应该是:

SELECT 
  * 
FROM 
  user u0_ 
  LEFT JOIN user u1_ ON (u0_.guard = u1_.id)

但我找不到通过QueryBuilder实现它的方法,然后在twig模板中访问它。

此致

1 个答案:

答案 0 :(得分:0)

好的,我发现了代码中的错误:

  1. 我试图设置OneToOne的实现,这是一个小错误,但我需要这里的ManyToOne。
  2. 
        /**
         * Many Users have One Guard (User)
         * @ORM\ManyToOne(targetEntity="User")
         */
        private $guard = 0;
    
    
    1. 当我这样做时,Symfony会自动强制我更改我的代码,而在“guard”栏中我必须插入User对象。

    2. 之后我不再需要加入 - 只需从表中选择数据,保护列包括我可以在Twig中使用的用户对象等。

    3. 
          namespace AppBundle\Entity;
          use Doctrine\ORM\EntityRepository;
      
          class UserRepository extends EntityRepository
          {
              public function findAllDB()
              {
                  $qb = $this->createQueryBuilder('u');
                  $query = $qb->getQuery();
                  return $query->execute();
              }
          }