Doctrine – OrderBy getter?

Aishak
Člen | 30
+
0
-

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
+
0
-

musis tu logiku, co je v getPrice, prepsat do sql (respektive dql).

mimochodem, jak vypadaji ty kriteria? jesti by to neslo navrhnout lepe..

Aishak
Člen | 30
+
0
-

Ta kritéria jsou podle hodnoty v buňce. Struktura je pak přesně TypCeny|Cena1|Cena2|Cena3. V buňce TypCeny je pak hodnota např. ‚Cena2‘
Buňka TypCeny takto musí být. Mění se v průběhu doby.

Díky

David Matějka
Moderator | 6445
+
0
-

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

Aishak
Člen | 30
+
0
-

Děkuji za příklad. Udělal jsem to tak nakonec již než si to napsal :-)

V rychlosti problém nebude. Vybírají se záznamy v řádech stovek.

Děkuji ti moc za pomoc