2013-12-01 2 views
1

Я работаю над проектом Symfony 1.4 и вам нужно настроить «имя» фильтра базы данных, чтобы столбец «name_full» выполнялся одновременно с столбцом «name».Сделать запрос на поиск по нескольким столбцам | Symfony 1.4

Я думал сделать это как то в моем 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 или даже рассказать мне, что не так с моим подходом.

Спасибо!

EDIT: Это правильная функция, как предложено 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

я узнал, что у меня будет перегрузки doBuildQuery() в моем FilterFormClass. Как именно поступать так, как я хочу? Я все еще охочусь за решением. –

+0

Вы можете проверить запрос с панели инструментов разработки, когда используете среду dev. –

ответ

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 '' 
+0

Большое спасибо Michal! Мне пришлось слегка настроить вашу функцию (см. Править выше), но теперь это работает! –

Смежные вопросы