Работа с категориями товаров.
Работа с категориями товаров.
Здравствуйте.
Есть таблица product:
https://c2n.me/3S4Fc0V в ней есть поле category_id, куда записывается id ПОДКАТЕГОРИИ.
Есть таблица категории https://c2n.me/3S4Fecb
Вопрос. Как мне вывести по ID КАТЕГОРИИ все товары, которые относятся ко всем подкатегориям этой категории? надеюсь поняли))
Есть таблица product:
https://c2n.me/3S4Fc0V в ней есть поле category_id, куда записывается id ПОДКАТЕГОРИИ.
Есть таблица категории https://c2n.me/3S4Fecb
Вопрос. Как мне вывести по ID КАТЕГОРИИ все товары, которые относятся ко всем подкатегориям этой категории? надеюсь поняли))
Re: Работа с категориями товаров.
Доброй ночи.
Создайте в моделях связи и через них выводите данные.
Создайте в моделях связи и через них выводите данные.
Re: Работа с категориями товаров.
Доброй)) Да я пробовал, не получается.... Можете подсказать как именно?
Re: Работа с категориями товаров.
вот, в модели product:
но так я получаю не то совсем....
Код: Выделить всё
public function getCategory(){
return $this->hasOne(Category::ClassName(), ['id' => 'category_id']);
}
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: Работа с категориями товаров.
Artikk писал(а): ↑2018.02.21, 01:08 Здравствуйте.
Есть таблица product:
https://c2n.me/3S4Fc0V в ней есть поле category_id, куда записывается id ПОДКАТЕГОРИИ.
Есть таблица категории https://c2n.me/3S4Fecb
Вопрос. Как мне вывести по ID КАТЕГОРИИ все товары, которые относятся ко всем подкатегориям этой категории? надеюсь поняли))
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: Работа с категориями товаров.
для начала надо собрать все дочерние иды конкретной категории.Wizard писал(а): ↑2018.02.21, 13:20Artikk писал(а): ↑2018.02.21, 01:08 Здравствуйте.
Есть таблица product:
https://c2n.me/3S4Fc0V в ней есть поле category_id, куда записывается id ПОДКАТЕГОРИИ.
Есть таблица категории https://c2n.me/3S4Fecb
Вопрос. Как мне вывести по ID КАТЕГОРИИ все товары, которые относятся ко всем подкатегориям этой категории? надеюсь поняли))
а сам запрос будет выглядеть так
Код: Выделить всё
$query->andWhere(new Expression('category_id in ('. implode(', ', $currentCategory['children']) .')'));
https://packagist.org/packages/paulzi/y ... cency-list
для небольшого количества категорий лично я выбираю все категории одним запросом и формирую из них два массива
Re: Работа с категориями товаров.
Код: Выделить всё
//код в модели поиска/фильтрации
$query = Product::find()->active();
if ($category) { // модель категории
$childrenIds = $category->getChildrenIds();
$query->andWhere(['category_id' => $childrenIds]);
}
// метод в модели категории
public function getChildrenIds($ids = [])
{
if (empty($ids))
$ids[] = $this->id;
$childs = self::find()->innerJoinWith('childs childs', false)
->select('childs.id')
->andWhere(['{{%category}}.id' => $ids, 'childs.status' => Category::STATUS_ACTIVE])
->column(); //количество этих запросов зависит от глубины дерева
if (!empty($childs))
$ids = array_filter(array_merge($ids, $this->getChildrenIds($childs)));
return $ids;
}
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: Работа с категориями товаров.
адаптируйте в соответсвии со своим кодомElisDN писал(а): ↑2018.02.07, 10:16Код: Выделить всё
if (!empty($this->category_id)) { $ids = [$this->category_id]; $childrenIds = $ids; while ($childrenIds = Category::find()->select('id')->andWhere(['parent_id' => $childrenIds])->column()) { $ids = array_merge($ids, $childrenIds); } $query->andWhere(['category_id' => array_unique($ids)]); }
Re: Работа с категориями товаров.
Немного не понял.
1. Что такое active()?
Вот я получил id категории: $cats = Category::findOne($id);
Вот у меня идет запрос продуктов
п.с. но запрос не правильный)
1. Что такое active()?
Вот я получил id категории: $cats = Category::findOne($id);
Вот у меня идет запрос продуктов
Код: Выделить всё
$dataProvider = new ActiveDataProvider([
'query' => $query = Product::find()->where(['category_id' => $cats->parent_id]),
'sort'=>array(
'defaultOrder'=>['id' => SORT_DESC],
),
'pagination' => [
'pageSize' => 9,
],
]);
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: Работа с категориями товаров.
Код: Выделить всё
$category = Category::findOne($id);
$query = Product::find();
if (!empty($category)) {
$ids = [$category->id];
$childrenIds = $ids;
while ($childrenIds = Category::find()->select('id')->andWhere(['parent_id' => $childrenIds])->column()) {
$ids = array_merge($ids, $childrenIds);
}
$query->andWhere(['category_id' => array_unique($ids)]);
}
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=>array(
'defaultOrder'=>['id' => SORT_DESC],
),
'pagination' => [
'pageSize' => 9,
],
]);
Re: Работа с категориями товаров.
Код: Выделить всё
public function active()
{
return $this->andWhere(['!=', '{{%product}}.status', Product::STATUS_OFF]);
}
Re: Работа с категориями товаров.
Код: Выделить всё
$category = Category::findOne($id);
$query = Product::find();
if (!empty($category)) {
$ids = [$category->id];
$childrenIds = $ids;
while ($childrenIds = Category::find()->select('id')->andWhere(['parent_id' => $childrenIds])->column()) {
$ids = array_merge($ids, $childrenIds);
}
$query->andWhere(['category_id' => array_unique($ids)]);
}
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=>array(
'defaultOrder'=>['id' => SORT_DESC],
),
'pagination' => [
'pageSize' => 9,
],
]);