2016-12-13 4 views
1

Таким образом, ее просто так: я следующий код в некоторых EntityDoctrine ORM порядок аннотациями полей объекта

 /** 
    * @var ServiceOffer 
    * 
    * @ORM\OneToMany(targetEntity="ServiceOffer", mappedBy="serviceProvider") 
    * @ORM\OrderBy({"service" = "desc"}) 
    */ 
    private $offers; 

Что мне нужно, чтобы сделать что-то вроде этого

 /** 
    * @var ServiceOffer 
    * 
    * @ORM\OneToMany(targetEntity="ServiceOffer", mappedBy="serviceProvider") 
    * @ORM\OrderBy({"service.points" = "desc"}) 
    */ 
    private $offers; 

, который не является работаю я не хочу делать это через какую-то функцию, которую я хотел прямо с аннотациями, есть ли способ сделать это?

это точки КСТАТИ:

/** 
    * @var integer 
    * 
    * @ORM\Column(name="points", type="integer", nullable=true) 
    */ 
    private $points; 
+0

«points» - это атрибут ServiceOffer? –

+0

Нет его атрибута в объекте службы –

+0

Я боюсь, что это может быть сделано только через DQL-запрос. Doctrine ORM еще не поддерживает это :( – yceruto

ответ

1

Нет, это не возможно. Вы должны решить это, создав dql.

Фрагмент DQL в OrderBy разрешен только для неквалифицированных, некотируемых имен полей и необязательного позиционного оператора ASC/DESC. Несколько полей разделяются запятой (,). Имена имен ссылок должны существовать в классе targetEntity аннотации @ManyToMany или @OneToMany.

Подробнее в doctrine2 documentation.

DQL Пример

SELECT provider, offer, service 
    FROM \MyNamespace\Entity\ServiceProvider provider 
    INNER JOIN provider.offers offer 
    INNER JOIN offer.service service 
WHERE 
    provider.id = 1 

Обратите внимание, этот фрагмент кода provider, offer, service очень важно вернуться сюда все объекты или поля, которые нужны будут так доктрина загрузит его на этот раз, если это возможно. Другими словами, если вы не включили какое-либо лицо и не вызвали его, доктрина будет загружать его лениво.

+0

Да, я уже это видел :( –

+0

, и это вызовет тяжелую нагрузку, потому что я могу искать более тысячи записей, а для создания запроса для каждой записи будет в огромном количестве запросов .... –

+0

Нет, это не так. Запрос легче, чем простой 'find' без mackanism fetch fetch. Я буду включать dql в ответ. Он может быть создан для создания одного sql. –

Смежные вопросы