@akula22

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

и сделать разные ссылки в выдаче поиска.

Вот начала делать пока на две таблицы
public function actionSearch($q)
    {
        $from = '(
            SELECT id, title, CONCAT(short, full) AS text, CONCAT("/video/", slug,"/",id) AS link FROM video UNION
            SELECT id, title, descr AS text, CONCAT("/clip/",id) AS link FROM clip UNION
        )';

        $where = 'WHERE t.text LIKE :query OR t.title LIKE :query';
        $params = array(
            ':query' => '%' . $q . '%',
        );

$countSql = 'SELECT COUNT(*) FROM ' . $from . ' AS t ' . $where;
        $dataSql = 'SELECT t.* FROM ' . $from . ' AS t ' . $where;

 $count = Yii::$app->db->createCommand($countSql)->queryScalar($params);
        $dataProvider = new SqlDataProvider([
            'sql' => $dataSql,
            'params' => $params,
            'totalCount' => $countSql,
            'pagination' => [
                'pageSize' => 20,
            ],
        ]);


выдает ошибку
SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
The SQL being executed was: SELECT COUNT(*) FROM (
SELECT id, title, CONCAT(short, full) AS text, CONCAT("/video/", slug,"/",id) AS link FROM video UNION
SELECT id, title, descr AS text, CONCAT("/clip/",id) AS link FROM clip UNION
) AS t WHERE t.text LIKE :query OR t.title LIKE :query
Error Info: Array
(
    [0] => HY093
    [1] => 0
)
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
wildvampir
@wildvampir
Маньяк программист, в худшем его проявлении.
1) убрать второй UNION в $from
2) в $where ":query" используется два раза, к сожалению так нельзя, вам надо описать ":query_text" и ":query_title" и соответственно использовать их в $where как 'WHERE t.text LIKE :query_text OR t.title LIKE :query_title'
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Я думаю, что Вы вообще не в ту сторону смотрите.
Опишите свои таблицы, покажите структуру, связи и тому подобное.
После того, как Вы дополните свой вопрос - можно говорить о том, как сделать поиск.
Пока можно сказать одно - выкиньте свой код и начните с создания поисковой модели, где всё будет описано и настроены связи между таблицами.
А то, как Вы делаете, в контролере - неверно.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы