Как сделать выборку похожих товаров в Yii2?

Есть 3 связанные таблицы с помощью 2 связующих таблиц.
Таблица books связывается с таблицей genres, так же books связывается с tags
5c10e3ba1d294326479527.png5c10e3c1950f3730471934.png

Связь обычная
public function getLinkGenresBooks()
    {
        return $this->hasMany(LinkGenresBooks::className(), ['books_id' => 'id']);
    }
    public function getGenres()
    {
        return $this->hasMany(Genres::className(), ['id' => 'genres_id'])->via('linkGenresBooks');
    }

    public function getLinkTagsBooks()
    {
        return $this->hasMany(LinkTagsBooks::className(), ['books_id' => 'id']);
    }
    public function getTags()
    {
        return $this->hasMany(Tags::className(), ['id' => 'tags_id'])->via('linkTagsBooks');
    }


Мне нужно на странице с книгой вывести подобные книги. Я считаю правильной логикой будет выбор книг у которых хотя бы 2 жанра И 2 тега такие же как у книги, на странице которой я нахожусь.

Проблема составления для этого SQL запроса. Попробовал поэкспериментировать, вроде что то выходит, но нет того, что именно 2 жанра и 2 тега.
$test = Books::find()->joinWith('genres g')->joinWith('tags t')->where(['or', ['g.id' => [1, 21, 30]]])->andWhere(['or', ['t.id' => [1, 5]]])->all();


Может я не совсем прав с логикой, тогда подскажите, как было бы более правильно сделать.
  • Вопрос задан
  • 197 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Так как связи у Вас HasMany, то номер не удастся. Надо или использовать GROUP BY или получать в несколько запросов, выбирая id-шники.
Ответ написан
Ваш ответ на вопрос

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

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