Свойство [столбцы] не существует в экземпляре Eloquent Builder - PullRequest
0 голосов
/ 25 октября 2019

Я получаю эту ошибку при попытке добавить подзапрос select в построитель запросов. эта ошибка возникает, когда я пытаюсь получить количество продуктов для данной категории.

addSubSelect Macro

Builder::macro('addSubSelect', function ($column, $query) {
            if (is_null($this->columns)) {
                $this->select($this->from.'.*');
            }
            return $this->selectSub($query, $column);
        });

Category.php

public function scopeWithProductCount($query){
        $query->addSubSelect('products_count', function($query) {
            $query->whereHas('product', function ($query) {
            $query->select('id')
                ->from('products')
                ->whereColumn('category_id', 'category.id')
                ->count();
        });
        });
    }

Контроллер категории

public function index()
    {
        $categories = $this->user()->store->categories()
            ->withProductsSum()
            ->get();

        return response()->json($categories);
    }

here is a screenshot of the error

Я изменил метод scopedWithProductCount на этотпопробуйте получить больше опций отладки, но я получаю ту же ошибку

public function scopeWithProductCount($query){

    $query->addSubSelect('', function($query) {

    });
}

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Свойство columns относится к классу Illuminate\Database\Query\Builder, а не Illuminate\Database\Eloquent\Builder. Ваш $this будет ссылаться на ссылку Eloquent\Builder, а не на Query\Builder.

. Попробуйте изменить macro следующим образом:

addSubSelect Macro

Builder::macro('addSubSelect', function ($column, $query) {
    if (is_null($this->getQuery()->columns)) {
            $this->select($this->from.'.*');
    }
    return $this->selectSub($query, $column);
});
0 голосов
/ 25 октября 2019

Напишите объединение и имя таблицы перед полем:

public function scopeWithProductCount($query){
        $query->addSubSelect('products_count', function($query) {
            $query->whereHas('product', function ($query) {
            $query->select('products.id')
                ->from('products')
                ->join('categories', 'categories.id', '=', 'products.category_id')
                ->count();
        });
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...