Сделать фильтр запроса поиска по нескольким столбцам | 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 ''
Другие вопросы по тегам