Задать вопрос
dyonis
@dyonis
Web разработчик

Как достать данные из связующей таблицы Yii2?

Есть три таблицы:
Order - заказы,
Product - продукты
Order2Product - связующая таблица (поля: order_id, product_id, price, quantity)

Связь заказа с продуктами задаётся таким кодом:
public function getProducts()
    {
        return $this->hasMany(Product::class, ['id' => 'product_id'])
            ->viaTable('order2product', ['order_id' => 'id']);
    }


Вопрос в том, как при получении продуктов заказа получить ещё и дополнительные данные из таблицы order2product, например количество?
  • Вопрос задан
  • 419 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Сделать две связи, одну через другую. И обращаться к ней.
https://www.yiiframework.com/doc/guide/2.0/ru/db-a...
Там два варианта, один как Ваш (с ->viaTable()), когда промежуток не важен и второй, когда он нужен (с ->via()).
Ну и как вариант просто добавить sql expression в select с COUNT. Но я бы связями пользовался.
Ответ написан
tigroid3
@tigroid3
PHP, YII2, SQL, Postgres, Docker, SPHINX, GIT
количество получить count($model->orderProduct).
следует понимать что т.к. связь hasMany, то в orderProduct будет массив объектов, либо бежим по $model->orderProduct в цикле, либо к конкретному объекту по ключу $model->orderProduct[0]->product->name

так же можно не через viaTable, а просто указать в with
в Order связь
public function getProductOrder() {
      return $this->hasMany(Order2Product::class, ['id' => 'order_id'])
}


в Order2Product связь
public function getProduct() {
     return $this->hasMany(Product::class, ['product_id' => 'id'])
}


а потом в запросе with(['orderProduct.product'])
Ответ написан
Ваш ответ на вопрос

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

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