Нахождение группового максимума в доктрине - PullRequest
5 голосов
/ 24 июня 2010

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

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

Ответы [ 2 ]

5 голосов
/ 24 июня 2010

Пример группового максимума:

$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 голос
/ 16 февраля 2017

Этот вопрос действительно старый, но он высоко оценивается в Google как "максимальная групповая доктрина", поэтому я решил добавить свое решение.

В моем случае у меня был родительский объект со многими детьми, и я хотелвыбрать поля от ребенка с самым высоким 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')
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...