Я использую Doctrine 2.4 и у меня есть абстрактный базовый класс, который содержит метод, как следует:Doctrine2 QueryBuilder, что явно не соответствует ничего
protected function getBaseQueryBuilder($type) {
switch ($type) {
case self::TYPE_1;
return $this->em->createQueryBuilder()->...lots of clauses...;
case self::TYPE_2;
return $this->em->createQueryBuilder()->...lots of clauses...;
/* many more types... */
case self::TYPE_N;
return /* want to return a query builder for the empty set */
}
}
Есть несколько суб-классы, наследуемые от этого базового класса, и каждый из них называет этот метод из нескольких мест. Затем они расширяют возвращаемые серверы запросов с дополнительными классовыми предложениями перед их выполнением. Однако в случае TYPE_N
никакие строки не должны совпадать.
Одним из решений является, конечно, возврат null для $type == TYPE_N
и проверка каждого звонящего на null
, а затем ничего не выполнить. Но было бы гораздо приятнее, если бы я смог вернуть построитель запросов, который никогда не будет соответствовать чему-либо, и для которого запрос никогда не попадет в БД. Это упростило бы многие сайты вызывающих абонентов.
Есть ли способ сделать это?
Мне нравится это решение. Он может быть даже расширен, чтобы переопределить 'andWhere()', 'orderBy()' и т. Д., Чтобы сделать эти операции еще более дешевыми. Я попытаюсь реализовать это и посмотреть, как это происходит. – jlh
Я думаю, что большинство методов типа 'andWhere',' innerJoin' и т. Д. Все что-то делают, а затем вызывают 'add', поэтому вы можете просто переопределить это, чтобы просто вернуть' $ this' и вырезать большую часть работы. – qooplmao