Сделать фильтр запроса поиска по нескольким столбцам | Symfony 1.4
Я работаю над проектом 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 или даже сказать, что не так с моим подходом.
Спасибо!
РЕДАКТИРОВАТЬ: Это правильная функция, предложенная Михалом и настроенная мной:
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 ответ
Попробуйте изменить это на:
$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 ''