tigroid3
@tigroid3
PHP, YII2, SQL, Postgres, Docker, SPHINX, GIT

Как составить запрос YII2?

Нужно составить вопрос вида
SELECT * FROM article LEFT JOIN hashtags_mid ON article.id=hashtags_mid.article_id WHERE `show`=1 AND (hashtags_mid.hash='три' OR hashtags_mid.hash='yii')

на данный момент имеется

SELECT * FROM article LEFT JOIN hashtags_mid ON article.id=hashtags_mid.article_id WHERE `show`=1 AND hashtags_mid.hash='три' OR hashtags_mid.hash='yii'


$query = Article::find()->joinWith(['hashTags'])->where(['show'=>1]);
$dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

foreach ($this->search as $one_query) {
                $query->OrFilterWhere(['hashtags_mid.hash' => $one_query]);
            }

у меня создаётся без скобок и получается что show=1 и условие всегда срабатывает
  • Вопрос задан
  • 214 просмотров
Решения вопроса 2
fornit1917
@fornit1917
Как-то так например:
andWhere("hashtags_mid.hash=:a OR hashtags_mid.hash=:b", [a=>'три', b=> 'yii'])
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
Соберите допустимые hashtags_mid.hash в массив и скормите его в один IN
Если не изменяет память,
->where(['show'=>1, 'hashtags_mid.hash' => ['yii', 'три']])

Сгенерирует верный запрос.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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