我无法使用 querybuilder 在存储库中构建特定请求

I can't build a specific request in the repository with querybuilder

我有 3 个表“User”、“Events”和“typeEvents”我想获得一个用户列表(例如:type = "Festival")。 用户实体也位于事件和类型事件的另一个包中。但这不是问题。

在其中一个实体中,我有一个多对多关系...所以我不能执行此查询构建器请求。

User.php :

class User extends BaseUser
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="pseudo", type="string", length=30, nullable=true)
     */
    private $pseudo;

    /**
     * @ORM\Column(name="name", type="string", length=255)
     *
     * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"})
     * @Assert\Length(
     *     min=3,
     *     max=255,
     *     minMessage="The name is too short.",
     *     maxMessage="The name is too long.",
     *     groups={"Registration", "Profile"}
     * )
     */
    private $name;

    /**
     * @var ArrayCollection $events
     * @ORM\OneToMany(targetEntity="BISSAP\BenevolesBundle\Entity\Events", mappedBy="user", cascade={"persist", "remove", "merge"})
     */
    private $events;
    [...]

Events.php:

class Events
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * 
     * @ORM\ManyToOne(targetEntity="TypeEvents", inversedBy="events", cascade={"persist"})
     *
     */
    private $typeEvents;

    /**
     * 
     * @ORM\ManyToOne(targetEntity="GenreEvents", inversedBy="events", cascade={"persist"})
     *
     */
    private $genreEvents;

    /**
     * 
     * @ORM\ManyToOne(targetEntity="BISSAP\UserBundle\Entity\User", inversedBy="events", cascade={"persist"})
     *
     */
    private $user;
    [...]

类型Events.php:

class TypeEvents
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var ArrayCollection $events
     * @ORM\OneToMany(targetEntity="Events", mappedBy="typeEvents", cascade={"persist", "remove", "merge"})
     */
    private $events;

    /**
     * @var string
     *
     * @ORM\Column(name="type", type="string", length=255)
     */
    public $type;
    [...]

所以在 userRepository 中我尝试使用 :

public function findUserEvent()
    {
        $qb = $this
            ->createQueryBuilder('u')
            ->leftJoin('u.events', 'ev')
            ->addSelect('ev')
            ->where('BISSAPBenevolesBundle:TypeEvents.type = :type')
            ->setParameter('type', 'Festival')
        ;

        return $qb->getQuery()->getResult();
    }

我得到这个错误:[Semantical Error] line 0, col 78 near 'BISSAPBenevolesBundle:TypeEvents.type': Error: 'BISSAPBenevolesBundle:TypeEvents' is not defined.

试试:

public function findUserEvent()
    {
        $qb = $this
            ->createQueryBuilder('u')
            ->leftJoin('u.events', 'ev')
            ->leftJoin('ev.types', 'evt')
            ->where('evt.type = :type')
            ->setParameter('type', 'Festival')
        ;

        return $qb->getQuery()->getResult();
    }

希望对您有所帮助