@kirill-93

Как составить запрос many to many в yii2?

Извините, если такой вопрос уже есть. Начал изучать yii2. В документации приведен такой пример many-to-many:
class Order extends \yii\db\ActiveRecord
{
    public function getItems()
    {
        return $this->hasMany(Item::className(), ['id' => 'item_id'])
            ->viaTable('order_item', ['order_id' => 'id']);
    }
}

Объясните, пожалуйста, куда и что вставлять, я о вторых параметрах (массивах) в методах.
Допустим у меня таблица category(id, name), таблица product(id, name) и таблица product_to_category(id, product_id, category_id). Как мне выбрать все товары из определенной категории?
Пробую так: Создал 2 модели Product и Category.
В Category создал метод:
public function actionProducts()
	{
        return $this->hasMany(Product::className(), ['id' => 'product_id'])
            ->viaTable('product_category', ['id' => 'category_id']);
	}

Теперь в контроллере пишу:
$category = Category::findOne(1);

$products = $category->actionProducts();


Возвращается объект со списком категорий. Объясните, пожалуйста, какой и куда id подставлять, чтоб получить товары из одной категории?
  • Вопрос задан
  • 3165 просмотров
Решения вопроса 1
Получить список категорий можно так:

$products = $category->actionProducts()->all();

или же, можно переименовить метод actionProducts в getActionProducts и тогда при запросе $category->actionProducts сработает магический метод, который вернет то, что нужно.

Проще посмотреть исходники, что бы понять как работает.

Вот ещё yiiframework.ru/doc/cookbook/ru/core.getters.setters
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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