语法错误行0,col 349:错误:预期文字,得到'aS'

时间:2016-07-07 07:18:42

标签: php database doctrine-orm symfony dql

我的DQL请求遇到了问题,如标题所示。

以下是我的第一行,似乎不是该错误的核心:

$qb = $this
        ->createQueryBuilder('p')
        ->leftJoin('p.localisation', 'loc')
        ->leftJoin('p.advert', 'a')
        ->leftJoin('a.accommodationStyle', 'aS')
        ->leftJoin('a.accommodationChoice', 'aC')
        ->where('loc.lat < :maxLat')
        ->setParameter('maxLat', $maxLat)
        ->andWhere('loc.lat > :minLat')
        ->setParameter('minLat', $minLat)
        ->andWhere('loc.lng < :maxLng')
        ->setParameter('maxLng', $maxLng)
        ->andWhere('loc.lng > :minLng')
        ->setParameter('minLng', $minLng)
    ;

问题在于:

            $orX = $qb->expr()->orX();

            $orX->add('aS.name = :house') 
                ->add('aS.name = :flat')
                ->add('aS.name = :villa') 
                ->add('aS.name = :bungalow')
            ;

            $qb->andWhere($orX)
               ->setParameters(
                    array(
                        'house' => 'House',
                        'flat' => 'Flat',
                        'villa' => 'Villa',
                        'bungalow' => 'Bungalow'
                    )
                )
            ;

我提供了我的实体碎片:

广告包含以下行:

/**
 * @ORM\ManyToOne(targetEntity="MR\PlatformBundle\Entity\AccommodationChoice", inversedBy="adverts", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=true)
 */
private $accommodationChoice;

/**
 * @ORM\ManyToOne(targetEntity="MR\PlatformBundle\Entity\AccommodationStyle", inversedBy="adverts", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=true)
 */
private $accommodationStyle;

AccommodationStyle,这一个:

/**
 * @ORM\OneToMany(targetEntity="MR\PlatformBundle\Entity\Advert", mappedBy="accommodationStyle")
 */
private $adverts;

AccommodationChoice,这一个:

/**
 * @ORM\OneToMany(targetEntity="MR\PlatformBundle\Entity\Advert", mappedBy="accommodationChoice")
 */
private $adverts;

和人,另一个:

/**
 * @ORM\OneToOne(targetEntity="MR\PlatformBundle\Entity\Advert", inversedBy="author", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=true)
 */
private $advert;

我探讨了有关该主题的现有帖子,但似乎没有人为此案提供帮助,在此先感谢一些帮助(非常感谢)!

1 个答案:

答案 0 :(得分:2)

您不能将aS用作别名,因为它是保留字(AS)。只需选择另一个。