【问题标题】:Make a filter query search multiple columns | Symfony 1.4进行过滤查询搜索多个列 | Symfony 1.4
【发布时间】:2013-12-01 10:51:32
【问题描述】:

我正在做一个 Symfony 1.4 项目,需要自定义一个后端过滤器“name”,以便同时搜索“name_full”列和“name”列。

我想在我的 FormFilterClass 中这样做:

public function addNameColumnQuery(Doctrine_Query $query, $field, $value) {

    $rootAlias = $query->getRootAlias();
    return $query->where(''.$rootAlias.'.name LIKE ?', "%$value%")
                 ->orWhere(''.$rootAlias.'.name_full LIKE ?', "%$value%");
}

但这不起作用,因为它给了我错误的结果集。而且我找不到可以转储完整 dql 以进行调试的文件。

请指出我可以在哪里转储完整的 dql,甚至告诉我我的方法有什么问题。

谢谢!

编辑:这是 Michal 建议并由我调整的正确功能:

public function addNameColumnQuery(Doctrine_Query $query, $field, $value)
{
    $rootAlias = $query->getRootAlias();
    return  $query->addWhere(
        ''.$rootAlias.'.name LIKE ? OR '.$rootAlias.'.name_full LIKE ?',
        array($value, $value)
    );
}

【问题讨论】:

  • 我发现我必须在我的 FilterFormClass 中重载 doBuildQuery()。我到底要怎么做?我仍在寻找解决方案。
  • 使用开发环境时可以从开发工具栏查看查询。

标签: symfony-1.4 doctrine-query


【解决方案1】:

尝试将其更改为:

$query->addWhere(
    '$rootAlias.'.name LIKE ? OR '.$rootAlias.'.name_full LIKE ?',
    array("%$value%", "%$value%")
);

通过使用->where(),您可以覆盖查询的整个where 部分,这样您就可以删除在调用函数addNameColumnQuery 之前应用的一些条件。 此外,通过使用上述语句,您将确保与OR 连接的两个条件将在括号中,因此您将拥有

condition1 AND condition2 AND (name LIKE '' OR name LIKE '')

不是

condition1 AND condition2 AND name LIKE '' OR name LIKE ''

【讨论】:

  • 非常感谢米哈尔!我不得不稍微调整你的功能(见上面的编辑),但现在它很有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2017-06-17
  • 2021-04-25
  • 2015-11-24
  • 1970-01-01
相关资源
最近更新 更多