специальный запрос symfony / doctrine (MAX) с Doctrine_Query :: create () - PullRequest
1 голос
/ 30 августа 2011

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

Ладно, давайте сейчас разберемся:

Table: a
primary key: id
string: name

Table: b
primary key: id
foreign key: a_id
int: cluster

То, что я хочу сделать, это получить максимальный кластер int для данного объекта a. В SQL:

SELECT MAX(b.cluster) FROM b WHERE b.a_id = ? GROUP BY b.cluster;

Поскольку я использую Symfony 1.4 и Doctrine 1.2, я хочу сделать это правильно, добавив метод в Class a с именем maxCluster ():

class A extends BaseA{

  ..

  public function maxCluster(){
    $q = Doctrine_Query::create()->select('MAX(b.cluster)')->from('B b')->where('b.a_id = ?', $this->getId())->groupBy('b.cluster');
    return Doctrine_Core::getTable('A')->execute($q);
  }
}

При этом я получаю следующее сообщение об ошибке:

A query with the name A/SELECT MAX(b.cluster) FROM B b WHERE b.a_id = ? GROUP BY b.cluster does not exist.

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

Спасибо за любую помощь, Себастьян

РЕДАКТИРОВАТЬ: я получил подсказку, поэтому знаю, что код функции maxCluster выглядит следующим образом:

$q = Doctrine_Query::create()->select('MAX(b.cluster) AS maxCluster')->from('B b')->where('b.a_id = ?', $this->getId())->;
$result = $q->fetchOne();
return $result->maxCluster;

Вопрос для меня сейчас: это лучший способ? Я запутался, что fetchOne возвращает массив картинок. Я не ожидал бы такого поведения, потому что я выбираю один int, а не объекты. Может быть, кто-нибудь может указать, что является лучшей практикой для таких запросов.

1 Ответ

1 голос
/ 30 августа 2011

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

Или вы можете использовать return $q->execute() чтобы вернуть результат запроса.

...