Сложные запросы Doctrine2 с необязательными параметрами - PullRequest
3 голосов
/ 12 декабря 2011

Хотите знать, как лучше всего обращаться к базе данных с необязательными параметрами?Например, у меня есть поиск с именем, местоположением, ценой, сортировка по * etc

Что мне делать на уровне модели и контроллера в приложении (я использую Symfony2, кстати)?

Я думал о том, чтобы динамически построить DQL в модели и передать ему сериализованные параметры через контроллер, например:

#controller

$res = $repo->search($serializedData);

#model/repo->search()

$data = expand($serializedData);
$dql = '';

if($data['sortby'])
  $dql .= .....

Любой совет?

Этот код предназначен для демонстрационных целей.,Это немного не верно:)

1 Ответ

7 голосов
/ 12 декабря 2011

Вкратце Построитель запросов Doctrine 2 .

Более длинный ответ будет

#Controller
// Say if the data was a form submission
$result = $repo->search($form_data)

Затем в вашей модели вы проверяете массив форм на наличие потенциальных ключей дляСортировать по.Например, если вы искали некоторые статьи.

#Article Repository

public function search($form_data)
{
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->select('Article')
        ->from('SomeBundle:Article');

    if($form_data['title'])
    {
        $qb->where($qb->expr()->like('Article.title', $qb->expr()->literal('%'.$form_data['title'].'%');
    }
    //For subsequent filters use $qb->andWhere()

    // You could do more here like pagination, or different hydration (return object or array)
    return $qb->getQuery()->getResult();
}

Ознакомьтесь с документацией, на которую я ссылался, для получения дополнительной информации

...