我无法使用 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();
}
希望对您有所帮助
我有 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();
}
希望对您有所帮助