Как в Yii2 получить принадлежность Товара от родителя категории, на которую он ссылкается?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Как в Yii2 получить принадлежность Товара от родителя категории, на которую он ссылкается?

Сообщение EVOSandru6 »

Добрый день,

Есть 2 таблицы -

products

.id
.name
.categoryid

category (nested set)

.id
.name
.lft
.rgt
.depth
.parent_id

В модели Products есть отношение:

Код: Выделить всё

public function getCategory()
    {
        return $this->hasOne(Category::className(), ['id' => 'category_id']);
    }

Т.е. сейчас я могу получить только товары определенной категоии:

Код: Выделить всё

$model = Products::findPublished()->andWhere([
            'category_id'=>$cid
        ]);

Как быть, если например мой товар закреплен за категорией * Бутафорные Микроорганизмы, А пользователь выбрал * Микроорганизмы.

Хочу, чтобы при данном выборе выводились все товары, прикрепленные непосредственно к данной категориии и прикрепленные к дочерним элементам.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как в Yii2 получить принадлежность Товара от родителя категории, на которую он ссылкается?

Сообщение ElisDN »

Код: Выделить всё

'category_id' => array_merge([$category->id], $category->children()->select('id')->column()),
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Как в Yii2 получить принадлежность Товара от родителя категории, на которую он ссылкается?

Сообщение EVOSandru6 »

ElisDN писал(а): 2017.08.10, 14:49

Код: Выделить всё

'category_id' => array_merge([$category->id], $category->children()->select('id')->column()),
Благодарю, Дмитрий!
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Как в Yii2 получить принадлежность Товара от родителя категории, на которую он ссылкается?

Сообщение EVOSandru6 »

ElisDN писал(а): 2017.08.10, 14:49

Код: Выделить всё

'category_id' => array_merge([$category->id], $category->children()->select('id')->column()),
Дмитрий, Ваш совет очень помог мне при построении SQL запроса. Подскажите пожалуйста в данном контексте - 'category_id' нужно класть в with, в join или куда-то еще?
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Как в Yii2 получить принадлежность Товара от родителя категории, на которую он ссылкается?

Сообщение EVOSandru6 »

EVOSandru6 писал(а): 2017.08.29, 08:17
ElisDN писал(а): 2017.08.10, 14:49

Код: Выделить всё

'category_id' => array_merge([$category->id], $category->children()->select('id')->column()),
Дмитрий, Ваш совет очень помог мне при построении SQL запроса. Подскажите пожалуйста в данном контексте - 'category_id' нужно класть в with, в join или куда-то еще?
sql запрос был таков:

Код: Выделить всё

$products = Products::findBySql("
            SELECT
                *
            FROM
                m_products
            WHERE
             category_id
            IN (
                SELECT
                    id
                FROM
                    t_products
                WHERE
                    lft >= '{$model->lft}'
                AND
                    rgt <= '{$model->rgt}'
            )
            "
        )->andWhere([
            'exist'=>PublicActiveRecord::EXIST_PUBLIC
        ])->all();
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как в Yii2 получить принадлежность Товара от родителя категории, на которую он ссылкается?

Сообщение ElisDN »

Класть в andWhere:

Код: Выделить всё

$products = Products::findPublished()->andWhere([
    'category_id' => array_merge([$category->id], $category->children()->select('id')->column()),
]);
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Как в Yii2 получить принадлежность Товара от родителя категории, на которую он ссылкается?

Сообщение EVOSandru6 »

ElisDN писал(а): 2017.08.29, 09:13 Класть в andWhere:

Код: Выделить всё

$products = Products::findPublished()->andWhere([
    'category_id' => array_merge([$category->id], $category->children()->select('id')->column()),
]);
Точно, спасибо Вам большое!
Закрыто