我正在使用Symfony2和Doctrine 2开发一个应用程序。
技术规格
我正在使用Symfony 2.7.1
我正在使用PostgreSQl 1.18.1
我有一个使用AliDatatableBundle生成的表,它允许我使用下面的图像搜索框来过滤表字段。
嗯,问题是,当我尝试过滤整数字段时,symfony失败并显示错误:
执行'SELECT count(s0_.id)时发生异常AS sclr0 FROM Subministrament s0_ INNER JOIN Abonat a1_ ON s0_.abonat_subministrament = a1_.id WHERE s0_.id LIKE?'与params [“%12%”]:
SQLSTATE [42883]:未定义的函数:7错误:运算符不存在:整数~~未知 第1行:... ON s0_.abonat_subministrament = a1_.id WHERE s0_.id LIKE $ 1 ^ 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。
错误是因为我正在使用带有整数字段的like命令。好吧,如果你可以使用强制转换命令转换文本数据类型中的整数字段,但是我正在使用Doctrine 2,如果我在查询中放置了强制转换,Symfony失败,因为强制转换命令不是一个已知的教义函数。我搜索了具有强制命令支持的教义扩展,但Symfony也失败了。
我尝试使用的代码是Alidatatables的代码。以下是失败的代码部分。
protected function _addSearch(\Doctrine\ORM\QueryBuilder $queryBuilder) {
if ($this->search == TRUE) {
$request = $this->request;
$search_fields = array_values($this->fields);
foreach ($search_fields as $i => $search_field) {
$search_param = $request->get("sSearch_{$i}");
if ($search_param !== false && $search_param != '') {
$field = explode(' ', trim($search_field));
$search_field = $field[0];
$queryBuilder->andWhere("$search_field like :ssearch{$i} ");
$queryBuilder->setParameter("ssearch{$i}", '%' . $request->get("sSearch_{$i}") . '%');
}
}
}
}