@EVOSandru6

Как правильно впаковать иерархично смерженную конструкцию в Yii2 (with или join)?

Добрый день, есть такой запрос:

(получить товары относящиеся к категоии и ее потомкам)

$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();


Хочу корректнее это делается в yii2 без sql?

По идее можно как-то так получить список идентификаторов категорий массивом:

array_merge([$category->id], $category->children()->select('id')->column())

Но это только категории, надо еще как то достать товары.

Придется еще 1 запрос делать с in

Подскажите - как правильно надо, может через with, relation scope или как то еще?
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
@davidnum95
$categories = Category::find()
            ->where(['>=', 'lft', $model->lft])
            ->andWhere(['<=', 'rgt', $model->rgt])
            ->with('products')
            ->all();

Связь:
public function getProducts()
    {
        return $this->hasMany(Product::className(), ['category_id' => 'id']);
    }


В массиве будут категории с товарами
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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