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

标签 symfony doctrine-orm

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

我应该在应用程序的模型和 Controller 级别做什么(顺便说一句,我正在使用 Symfony2)?

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

#controller

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

#model/repo->search()

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

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

有什么建议吗?

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

最佳答案

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

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

关于symfony - 带有可选参数的复杂 Doctrine2 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8476510/

相关文章:

postgresql - 无法连接到服务器: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432?

php - symfony2 多对多奏鸣曲管理模型列表

Symfony 表单 mime 类型应该只接受 PDF 文件

php - Doctrine Query Builder 从表中删除所有条目

php - 自定义数据提供程序上的 ApiFilter 搜索不起作用

ajax - 在 ajax 提交上禁用 symfony 2 csrf token 保护

forms - 使用数组/Doctrine2 绑定(bind)并保存带有集合字段的表单

symfony - 如何查询在 odm Doctrine 中嵌入特定项目的所有项目

php - Doctrine 2 无法运行 SELECT 查询问题

php - 尝试使用 Doctrine2 访问 PostgreSQL 时出现错误 : undefined table,