我正在研究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)
);
}
答案 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 ''