Dam*_*che 3 symfony doctrine-orm
想知道使用可选参数查询数据库的最佳方法.例如,我有一个搜索,其名称,位置,价格,排序等*
我应该在应用程序的模型和控制器级别上做什么(我使用的是Symfony2 btw)?
我的想法是在模型中动态构建DQL,并通过控制器将序列化参数传递给它,如:
#controller
$res = $repo->search($serializedData);
#model/repo->search()
$data = expand($serializedData);
$dql = '';
if($data['sortby'])
$dql .= .....
Run Code Online (Sandbox Code Playgroud)
有什么建议?
此代码用于演示目的.它不是有点有效:)
简而言之,使用Doctrine 2查询构建器.
答案会更长
#Controller
// Say if the data was a form submission
$result = $repo->search($form_data)
Run Code Online (Sandbox Code Playgroud)
然后在您的模型中检查表单数组以查找可能的排序键.例如,如果您正在搜索某些文章.
#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();
}
Run Code Online (Sandbox Code Playgroud)
查看我链接的文档以获取更多信息
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |