Isolution666
@Isolution666
Full-Stack Developer

Как сделать поиск по нескольким таблицам в базе данных на Yii2?

Здравствуйте.
--
Хотел уточнить, как будет правильнее и безопаснее, джойнами или какими другими DAO запросами в Yii2 делать поиск по словам или предложениям в нескольких таблицах?
Я собираюсь использовать Html::beginForm чтобы не привязываться к конкретному экшену, а тянуть запрос из БД если был сделан запрос.
То есть будет некий код:
<?= Html::input('text', 'search', $search->name, ['class' => $class]) ?>

Который будет обрабатываться контроллером.
К примеру есть три таблицы с которыми он будет работать.
"test1" , "test2" , "test3"
...->where(['like', 'search', $search->name])->all();

То есть не существующая не в какой модели name="search". Он через get-запрос будет искать совпадения по указанным выше таблицам. Понимаю, тема избитая, но я хочу понять принцып. Как экранировать имена таблиц - я знаю.
А грамотно такие запросы делать не умею. Под грамотностью подразумевается нагрузка на сервер при большом и массовом запросе, когда поиск ведётся в нескольких таблицах в независимости от того, что за имена столбцов.
Это мне нужно, чтобы я сам смог научится делать карту сайта, если конкретного запроса не было, либо выводить как поисковик то, что указал в поле search.

Чтобы было более понятно, я буде использовать ajax и javascript функцию, которая без нажатия на кнопку будет искать введёные данные. Я этот фокус проделывал с одной таблицей, и у меня вылетала ошибка о том, что я сделал очень много запросов. В общем нужны советы профессионалов, кто в этом понимает больше, чем мимо проходящие критики.

Как можно? И как нужно? Как лучше это сделать?
  • Вопрос задан
  • 756 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Задумайтесь вначале, как Вы планируете выводить результаты. Если это три таблицы, то там разные сущности и сделать один список не есть правильно. Скорее всего это три блока с результатами, тогда это 3 запроса в базу и три отдельные массива объектов.

Я собираюсь использовать Html::beginForm чтобы не привязываться к конкретному экшену

Тут не увидел логики, поясните.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы