Модель перестала передавать результаты запроса

Рейтинг: -2Ответов: 1Опубликовано: 25.05.2023

Разрабатываю сайт по продаже книг на Ларавель для себя. На нём имеется фильтр, который хорошо работал до того, как я добавил столбы в базу, после чего перестал отправлять результаты запрос. Покопался, решил вернуть базу обратно, но эффекта это никакого не дало. Не могу решить проблему. В dd без toSQL все нормально, wheres на месте, а при добавлении ToSQl IdGenre таинственным образом исчезает. Каким образом исправить данную ошибку?

dd без toSQL dd вместе с toSQL

Модель Products

<?php

namespace App\Models;
use App\Filters\QueryFilter;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class product extends Model
{
    use HasFactory;

    public function genre() {
        return $this->belongsTo(Genre::class);
    }
    public function author() {
        return $this->belongsTo(Author::class);
    }

    public function scopeFilter(Builder $builder, Queryfilter $filter) {
        return $filter->apply($builder);
    }

    protected $guarded = [

    ];
}

QueryFilter

<?php

namespace App\Filters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;

class QueryFilter
{
    public $request;
    protected $builder;
    protected $delimiter = ',';

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function filters()
    {
        return $this->request->query();

    }

    public function apply(Builder $builder)
    {
        $this->builder = $builder;
        foreach ($this->filters() as $name => $value) {
            if (method_exists($this, $name)) {
                call_user_func_array([$this, $name], array_filter([$value]));
            }
        }

        return $this->builder;
    }

    protected function paramToArray($param)
    {
        return explode($this->delimiter, $param);
    }
}

ProductFilter

<?php

namespace App\Filters;

class ProductFilter extends QueryFilter{
    public function genre_id($id = null){
        return $this->builder->when($id, function($query) use($id){
            $query->where('idGenre', $id);
        });
    }


    public function search_field($search_string = ''){
        return $this->builder
            ->where('productTitle', 'LIKE', '%'.$search_string.'%');

    }
}

Контроллер

    public function catalog(ProductFilter $request){
    $products = Product::filter($request)->join('authors', 'products.idAuthor', '=', 'authors.idAuthor');

    $genres = Genre::all();
    return view('catalog',compact(['products', 'genres']));
}

Ответы

▲ 0

В контроллере надо было дописать get() в запрос