Есть две таблицы, "Категории" и "Товары".
Структура таблицы "Категории"
Код: Выделить всё
id
title
parent_id
Код: Выделить всё
id
title
price
categories_id // id дочерней категории
Код: Выделить всё
public function getParent()
{
return $this->hasOne(Categories::class, ['id' => 'parent_id']);
}
public function getChildCategories()
{
return $this->hasMany(Categories::class, ['parent_id' => 'id']);
}
public function getProducts()
{
return $this->hasMany(Products::class, ['categories_id' => 'id'])->limit(4);
}
То есть в таком виде
Код: Выделить всё
Первая категория
подкатегория № 1
подкатегория № 2
подкатегория № 3
подкатегория № 4
товар подкатегории № 1
товар подкатегории № 2
товар подкатегории № 3
товар подкатегории № 4
Код: Выделить всё
$categories = Categories::find()
->from(['parent' => self::tableName()])
->where(['parent.parent_id' => null])
->joinWith(['childCategories child'])
->joinWith(['products product'])
->all();
Код: Выделить всё
SELECT `parent`.* FROM `categories` `parent`
LEFT JOIN `categories` `child` ON `parent`.`id` = `child`.`parent_id`
LEFT JOIN `products` `product` ON `parent`.`id` = `product`.`categories_id`
WHERE `parent`.`parent_id` IS NULL
SELECT * FROM `categories` `child` WHERE `parent_id` IN (1, 6)
SELECT * FROM `products` `product` WHERE `categories_id` IN (1, 6) LIMIT 4
Подскажите, как правильно сделать запрос и установить limit на выборку товаров(для каждой подкатегории должен выводится один товар)?