复杂的Doctrine2查询带有可选参数

时间:2011-12-12 15:18:49

标签: symfony doctrine-orm

想知道使用可选参数查询数据库的最佳方法。例如,我有一个搜索,其名称,位置,价格,按*等排序

我应该在应用程序的模型和控制器级别上做什么(我使用Symfony2 btw)?

我的想法是在模型中动态构建DQL,并通过控制器将序列化参数传递给它,如:

#controller

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

#model/repo->search()

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

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

有什么建议吗?

此代码仅用于演示目的。它不是有点有效:)

1 个答案:

答案 0 :(得分:7)

简而言之,使用Doctrine 2 query builder

答案越长

#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();
}

查看我链接的文档以获取更多信息