如何根据相关 OneToMany 关联中的条件 select 一组实体?
How to select a group of entities according to a condition in a related OneToMany association?
我正在使用 Symfony4,我有两个实体 User
和 Car
。
A Car
有一个类型为 bool
的字段 isRent
和关系的数据库列 user_id
。
class User
{
/**
* @var Collection
*
* @ORM\OneToMany(targetEntity="Car", mappedBy="user")
*
* @Serializer\Type("ArrayCollection<ListRestAPI\Entity\Cars>")
* @Serializer\Expose()
*/
private $cars;
class Car
{
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="User", inversedBy="cars")
*/
private $user;
现在我正在尝试获取所有租车的用户。
我当前的查询会获取所有用户,无论他们是否租车。
$query = $this->createQueryBuilder('u')
->select()
->join('u.cars', 'c')
->andWhere(sprintf('%c.is_rent = :isRent', 'c'))
->setParameter('isRent', '1')
->groupBy('u.id')
->addOrderBy('u.id');
我如何才能只获取 User
个租车的实体?
尝试通过以下方式删除您的 andWhere()
:
->having('c.isRent = 1')
由于您在查询中使用的是整数,因此无需使用绑定参数。您还应该删除 setParameter()
.
我正在使用 Symfony4,我有两个实体 User
和 Car
。
A Car
有一个类型为 bool
的字段 isRent
和关系的数据库列 user_id
。
class User
{
/**
* @var Collection
*
* @ORM\OneToMany(targetEntity="Car", mappedBy="user")
*
* @Serializer\Type("ArrayCollection<ListRestAPI\Entity\Cars>")
* @Serializer\Expose()
*/
private $cars;
class Car
{
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="User", inversedBy="cars")
*/
private $user;
现在我正在尝试获取所有租车的用户。
我当前的查询会获取所有用户,无论他们是否租车。
$query = $this->createQueryBuilder('u')
->select()
->join('u.cars', 'c')
->andWhere(sprintf('%c.is_rent = :isRent', 'c'))
->setParameter('isRent', '1')
->groupBy('u.id')
->addOrderBy('u.id');
我如何才能只获取 User
个租车的实体?
尝试通过以下方式删除您的 andWhere()
:
->having('c.isRent = 1')
由于您在查询中使用的是整数,因此无需使用绑定参数。您还应该删除 setParameter()
.