Ошибка SQL при попытке создать фильтр

219
12 февраля 2018, 05:07

Integrity constraint violation: 1052 Column 'category_id' in where clause is ambiguous The SQL being executed was: SELECT COUNT(*) FROM product p LEFT JOIN category ON p.category_id = category.id LEFT JOIN product ON category.id = product.category_id WHERE (p.category_id='1') AND (category_id IN ('1', '6', '7', '8'))

Пытаюсь вывести продукты из дочерних категорий при выборе родительской.

ProductSearch:

    public function search($params)
{
    $query = Product::find()
        ->from(['p' => Product::tableName()])
        ->with(['designer', 'category'])
        ->joinWith([
            'childrenProducts pp' => function (ActiveQuery $query) {
                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)]);
                }
            }
        ]);
    // add conditions that should always apply here
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
    $this->load($params);
    if (!$this->validate()) {
        // uncomment the following line if you do not want to return any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }
    // grid filtering conditions
    $query->andFilterWhere([
        'p.id' => $this->id,
        'p.category_id' => $this->category_id,
        'p.designer_id' => $this->designer_id,
        'p.price' => $this->price,
        'p.new' => $this->new,
        'p.hit' => $this->hit,
        'p.sale' => $this->sale,
        'p.created_at' => $this->created_at,
        'p.updated_at' => $this->updated_at,
        'pp.childrenProducts' => $this->childrenProducts
    ]);

Product:

/**
 * @return \yii\db\ActiveQuery
 */
public function getCategory()
{
    return $this->hasOne(Category::className(), ['id' => 'category_id']);
}
/**
 * @return \yii\db\ActiveQuery
 */
public function getDesigner()
{
    return $this->hasOne(Designer::className(), ['id' => 'designer_id']);
}
public function getChildrenProducts()
{
    return $this->hasMany(Product::className(), ['category_id' => 'id'])->indexBy('id');
}

Давно пытаюсь подружить, но... только учусь и не понимаю всей магии. Пожалуйста объясните подробно. Может быть есть другие варианты для этой задачи?

READ ALSO
Laravel плохая документация [требует правки]

Laravel плохая документация [требует правки]

Может это я придираюсь или слишком избалован, но почему отсутствуют целые неймспейсы в их апи? Я класс Gate нашел только в куче классов, а неймспейс...

222
Изменение ширины блоков после шаблона opencart

Изменение ширины блоков после шаблона opencart

Привет всемЕсть вопрос по поводу стандартного шаблона в OPENCART

179
Каким образом сохранять куки в PHP?

Каким образом сохранять куки в PHP?

Написал код для входа/регистрации пользователей, теперь ломаю голову, каким образом сохранять куки пользователямВся головоломка заключается...

248
PHP создание папки от определенного uid

PHP создание папки от определенного uid

Мне нужно создать папку на сервере от заданного uid

312