2012-06-18 3 views
1

Доктрина создали хранилище для моего класса и получить список всех элементов, отсортированных по любой строке, я написал этот член:Symfony2 - EntityRepository - Сортировка строк - это хороший и безопасный подход?

class NoteRepository extends EntityRepository { 
    public function findAllOrderedByRow($row, $order = 'ASC') { 
     if ('DESC' != strtoupper($order)) { 
      $order = 'ASC'; 
     } 

     if (property_exists('Namespace\Entity', $row)) { 
      return $this->getEntityManager() 
       ->createQuery('SELECT o FROM Entity o ORDER BY o. ' . $row . ' ' . $order) 
       ->getResult(); 
     } 

     return null; 
    } 
} 

Мой вопрос, является ли это хороший подход, или лучше, чтобы добавить функции для всех отсортированных строк? И это экономить, чтобы использовать его так? Я не вижу способа для инъекций. Но, возможно, я забыл об этом.

Большое спасибо, Philipp

+1

При использовании программно сгенерированных запросов я бы пошел на 'QueryBuilder' –

ответ

4

Существует функция доступна в EntityRepository называется findBy. Вы можете передать заказ по второму параметру.

public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) 

И маленький пример:

$this->getDoctrine()->getRepository('User')->findBy(
    array(), 
    array('email' => 'asc') 
); 

Переопределение такого поведения в моей точке зрения бесполезно.

+0

Большое спасибо - вы абсолютно правы. Снова я упустил замечательную функцию сборки. Спасибо за подсказку. – insertusernamehere

Смежные вопросы