@dasauser
Пишу на PHP

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

Суть: получаю $id, нахожу в таблице product_image'id' => $id, и также надо надо запись из таблицы product, у которой должно быть 'id' => 'product_image->id'. Найти нужно одну запись картинки и одну запись продукта.
Как это оформить?
Сделал так:
$model = Images::find()
            ->joinWith('products')
            ->where(['id' => $id])
            ->andWhere(['id' => 'product_id'])
            ->one();

но похоже что что-то не так оформил.
Думаю можно сделать 2 запроса, но тогда какой смысл от joinWith?
Можно обойтись без второго запроса и как это оформить?
  • Вопрос задан
  • 2316 просмотров
Решения вопроса 1
@dasauser Автор вопроса
Пишу на PHP
$model = Images::find()
        ->joinWith('product')
        ->where(['product.id' => $id])
        ->asArray()
        ->one();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vyrkmod
Пишу на php. И не стыдно.
Очевидно, не описана связь картинка-продукт, иначе продукт "доставался" бы не через Products::find(), а навроде $model->product. Вот тут подробно. В вашем случае надо что-то вроде
class Images extends ActiveRecord
{
    // ...

    public function getProduct()
    {
        return $this->hasOne(Products::className(), ['id' => 'product_id']);
    }
}

UPD: для жадной загрузки используем метод with() а не joinWith(), последний предназначен для ручной сборки запросов.
Ответ написан
Ваш ответ на вопрос

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

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