Doctrine – OrderBy getter?
- Aishak
- Člen | 30
Zdravím,
mám entitu (produkt), která má více cen (cena1, cena2 a cena3). Aktuální cena se vybírá podle určitých kritérií a na to mám udělanou metodu get() uvnitř entity např. getPrice() a ta mi vrátí aktuální cenu produktu. Pro každý produkt může být aktuální cena z jiného sloupce. Pro produkt 1 to může být cena3 a pro produkt 2 to může být cena1 (→ proto ta metoda get). Nyní by mě však zajímalo, zda mohu seřadit produkty podle ceny, ale samozřejmě podle té jednotné ceny, kterou mi vrací ta metoda getPrice().
Představoval bych si to asi nějak takto v QB:
->orderBy(getPrice())
to je ale samozřejmě blbost. Lze to nějak vyřešit? Zatím jsem nepřišel
na řešení :(
Děkuji za rady :-)
- David Matějka
- Moderator | 6445
musis tu logiku, co je v getPrice, prepsat do sql (respektive dql).
mimochodem, jak vypadaji ty kriteria? jesti by to neslo navrhnout lepe..
- David Matějka
- Moderator | 6445
melo by jit v dql neco jako
->addSelect("CASE WHEN p.typCeny = 'Cena1' THEN p.Cena1 WHEN p.typCeny = 'Cena2' THEN p.Cena2 ELSE p.Cena3 END AS HIDDEN orderPrice")
->addOrderBy('orderPrice')
problem je, ze v mysql neudelas (v postgre jo) index nad expression, tak to asi bude celkem pomale (zalezi na poctu zaznamu). zvazil bych tak moznost sloupecku Cena, kde se bude pri zmene zapisovat ta konkretni cena. pripadne trigger, ktery bude delat to stejne