如何根据相关 OneToMany 关联中的条件 select 一组实体?

How to select a group of entities according to a condition in a related OneToMany association?

我正在使用 Symfony4,我有两个实体 UserCar

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().