Доктрина 2 - Поиск во многих семьях - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть объект с именем SpecialOffer У него есть реляционная сущность ManyToOne с именем SpecialOfferBusiness, а у SpecialOfferBusiness есть реляционная сущность ManyToMany SpecialOfferCategory, вот пример кода.

class SpecialOffer
{
    use ORMBehaviors\Translatable\Translatable;

    ...

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\SpecialOfferBusiness")
     * @ORM\JoinColumn(name="special_offer_business_id", referencedColumnName="id", unique=false, nullable=true, onDelete="SET NULL")
     */
    protected $business;

    /**
     * @ORM\Column(length=128, unique=true, nullable=true)
     */
    private $slug;
}


class SpecialOfferBusiness
{
    use ORMBehaviors\Translatable\Translatable;

    ...

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

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\SpecialOfferCategory")
     * @ORM\JoinTable(
     *     name="special_offer_business_category",
     *     joinColumns={@ORM\JoinColumn(name="special_offer_business_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="special_offer_category_id", referencedColumnName="id", unique=false)}
     * )
     */
    protected $categories;
}

class SpecialOfferCategory
{
    use ORMBehaviors\Translatable\Translatable;

    ...

    /**
     * @ORM\Column(name="slug", type="string", length=255, nullable=true)
     */
    private $slug;
}

Iтеперь хочу искать записи SpecialOffer с SpecialOfferCategory, например, категория может быть restaurant Я хочу искать все SpecialOffer по категории ресторан (категория slug)

Вот что я пробовал.

$dql = '
    SELECT
        special_offer,
        business,
        business.categories
    FROM
        App:SpecialOffer special_offer
    LEFT JOIN
        special_offer.business AS business
    WHERE
        special_offer.enabled = :enabled AND
        :category MEMBER OF business.categories
';

Это дает мне следующую ошибку

[Semantical Error] line 0, col 171 near 'categories
': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

Практически, решение, которое я искал и пробовал, дает мне различные ошибки, где я здесь ошибаюсь? как мне искать записи из специальных предложений для данной категории с реляционной иерархией SpecialOffer > SpecialOfferBusiness > SpecialOfferCategory

Спасибо.

...