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

时间:2016-04-01 15:38:43

标签: php symfony doctrine-orm many-to-many query-builder

我有3个桌子" 用户"," 活动" " typeEvents "我想获得一个用户列表(例如:type =" Festival")。 用户实体也在另一个包中,即Events和typeEvents。但这不是问题。

在其中一个实体中,我有很多ToMany关系...所以我无法执行此查询构建器请求。

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;
    [...]

TypeEvents.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.

1 个答案:

答案 0 :(得分:2)

尝试:

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();
    }

希望这个帮助