Если ключевое слово является производителем то поиск осуществляется нормально. Но если ключевое слово товар, то выводится производитель только с товаром удовлетворяющим поисковой фразе. Как сделать чтобы выводились все товары производителя если хотя бы один из них удовлетворяет ключевому слову. Заранее спасибо.
Вы ищите только по двум условиям где указан критерий. В первом критерии также добавьте 'OR' в качестве последнего аргумента, а строку выборки измените вот так:
$manufacturer = Manufacturer::model()->with('products')->findAll($criteria);
Тут я ошибся. Так и пробовал искать. Проблема не в том что не ищет, а в том что для производителя выбираются только те товары которые подходят под LIKE, а нужны все
Нашел один из вариантов решения задачи. Суть в том чтобы на первом шаге выбрать все id производителей удовлетворяющих заданным условиям, а затем выбрать модели по первичному ключу.
В принципе такой вариант вполне рабочий, но может кто-нибудь предложит другой?
Если "ручками" - то это дополнительный JOIN со второй таблицей products или второй подзапрос...
Скорее всего, и то и другое уступает в производительности... (да и в удобстве работы, пожалуй)
На сколько я понял, вам надо написать 2 разных запроса выборки, возвращающих одинаковый набор полей, но выбирающих их по разному принципу - это будет на много проще, т.к. определить какой запрос использовать можно очень просто - по заданному параметру. Если пытаться все впихнуть в один запрос, то это может либо не получиться, либо что еще хуже, запрос начнет тормозить на реальных наборах данных, но узнаете вы об этом только при запуске проекте или спустя какое-то время, если не сделаете тестовый стенд и не проверите.