Doctrine — все записи возвращаются, когда нет совпадений в поведении с возможностью поиска

#php #orm #doctrine

#php #orm #doctrine

Вопрос:

Я использую поведение с возможностью поиска в Doctrine для поиска товаров в моем каталоге. Это отлично работает при поиске ключевых слов, которые действительно соответствуют продукту. Например, ключевое слово «Backpack» возвращает все продукты со словом «Backpack» в названии.

Однако, когда выполняется поиск по ключевому слову, которое вообще не соответствует названию, возвращается каждая запись. Например, «ASDF» возвращает все продукты.

Почему это происходит и как я могу это исправить?

Ответ №1:

У меня была такая же проблема при использовании Lucene. Если я правильно помню, причина, по которой это произошло, заключалась в том, что lucene возвращает список идентификаторов, соответствующих запрошенным параметрам. И если ни одно из них не возвращено, то в Doctrine нет критериев для поиска по, следовательно, запросам без предложения where.

Я ожидаю, что в вашем действии у вас, вероятно, будет вызов Lucene для поиска подходящих продуктов, а затем вызов, использующий эти результаты в качестве критериев для их извлечения; Я решил проблему, вставив if вокруг основного запроса, проверяя, что Lucene вернул что-то полезное.

Комментарии:

1. Обертывание оператора if вокруг основного запроса, чтобы проверить, вернула ли Doctrine что-либо, решило проблему. Спасибо за вашу помощь.