2010-06-23 4 views
5

Как найти групповой максимум или строку, содержащую максимальное значение, в Доктрине? В SQL я обычно делал это, используя самоподключение, как описано here.Поиск группового максимума в доктрине

Хотя можно установить отношение к себе в Доктрине, есть ли лучшие способы сделать это?

+0

Любые причины, по которым вы не хотите использовать отношение к себе? – DrColossos

+0

Две причины: 1) Кажется, это нарушает модель ORM. То есть, у объекта нет смысла копировать его. 2) Я делаю этот запрос редко, поэтому не стоит добавлять отношение. –

ответ

5

Пример GROUPWISE макс:

$query = Doctrine_Query::create() 
    ->select("txs.id, txs.amount, txs.valid_from") 
    ->from("Tx txs") 
    ->where("txs.amount = (SELECT MAX(transact.amount) FROM tx transact WHERE txs.id = transact.id)"); 

Пример строки, содержащей максимальное:

$query = Doctrine_Query::create() 
->select("txs.id, txs.amount, txs.valid_from") 
->from("Tx txs") 
->where("txs.id = (SELECT transact.id FROM tx transact WHERE transact.amount = (SELECT MAX(transactx.amount) FROM tx transactx))"); 

Это, вероятно, не единственные способы (или наиболее чистые), но я просто испытан как и они работают ,

1

Этот вопрос действительно старый, но он высоко оценивает Google для «doctrine groupwise max», поэтому я решил добавить свое решение.

В моем случае у меня было родительское сущность с большим количеством детей, и я хотел выбрать поля из ребенка с самым высоким ID.

$qb 
    ->select('child1.field') 
    ->from(Entity::class, 'entity') 
    ->join('entity.children', 'child1') 
    ->leftJoin('entity.children', 'child2', 'WITH', 'child1.entity=child2.entity AND child1.id<child2.id') 
    ->where('child2.id IS NULL') 
; 
Смежные вопросы