进行过滤查询搜索多列| Symfony 1.4

时间:2013-12-01 10:51:32

标签: symfony-1.4 doctrine-query

我正在研究Symfony 1.4项目,需要自定义后端过滤器“name”,以便同时使用“name”列搜索“name_full”列。

我想在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)
    );
}

1 个答案:

答案 0 :(得分:2)

尝试将其更改为:

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

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

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

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