如何更改查询以包含来自加入 table 的数据?
How to change Query to contain data from joined table?
我有简单的实体:
ID
用户名
警卫
"guard" 是来自同一实体的另一个用户的 ID。我必须使用简单的 table:
渲染视图
用户名 |警卫姓名
--------------------------
约翰 |鲍勃
我尝试通过查询来做到这一点:
$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
*
从
用户 u0_
LEFT JOIN 用户 u1_ON (u0_.guard = u1_.id)
但我找不到通过 QueryBuilder 实现它然后在 twig 模板中访问它的方法。
此致
好的,我发现了我代码中的错误:
- 我试图设置 OneToOne 关系,这是一个小错误,但我在这里需要 ManyToOne。
/**
* Many Users have One Guard (User)
* @ORM\ManyToOne(targetEntity="User")
*/
private $guard = 0;
当我这样做时,Symfony 会自动强制我更改我的代码,并且在 "guard" 列中我必须插入用户对象。
在那之后我不再需要加入 - 只是 select 来自 table 的数据和保护列包括我可以在 Twig 等中使用的用户对象
namespace AppBundle\Entity;
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
public function findAllDB()
{
$qb = $this->createQueryBuilder('u');
$query = $qb->getQuery();
return $query->execute();
}
}
我有简单的实体:
ID 用户名 警卫
"guard" 是来自同一实体的另一个用户的 ID。我必须使用简单的 table:
渲染视图用户名 |警卫姓名 -------------------------- 约翰 |鲍勃
我尝试通过查询来做到这一点:
$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 * 从 用户 u0_ LEFT JOIN 用户 u1_ON (u0_.guard = u1_.id)
但我找不到通过 QueryBuilder 实现它然后在 twig 模板中访问它的方法。
此致
好的,我发现了我代码中的错误:
- 我试图设置 OneToOne 关系,这是一个小错误,但我在这里需要 ManyToOne。
/** * Many Users have One Guard (User) * @ORM\ManyToOne(targetEntity="User") */ private $guard = 0;
当我这样做时,Symfony 会自动强制我更改我的代码,并且在 "guard" 列中我必须插入用户对象。
在那之后我不再需要加入 - 只是 select 来自 table 的数据和保护列包括我可以在 Twig 等中使用的用户对象
namespace AppBundle\Entity; use Doctrine\ORM\EntityRepository; class UserRepository extends EntityRepository { public function findAllDB() { $qb = $this->createQueryBuilder('u'); $query = $qb->getQuery(); return $query->execute(); } }