Как вызвать два метода модели в моем контроллере в Laravel - PullRequest
0 голосов
/ 02 апреля 2020

Я надеюсь, что вы можете понять вопрос, дело в том, что я создал два метода в моей модели, один для фильтрации записей по категориям, а другой по городам.

Но когда я go мой контроллер, в индексе функции publi c, я думаю, он не может вызывать оба одновременно, надеюсь, это лучше понять в примере.

public function **scopeBuscadorCategoria** (Builder $query) {
    if (session()->has('s')){
        $query->where('nombre', 'LIKE', "%". session('s') ."%");
    }
    if (session()->has('dcategoria')){
        $query->where('categoria_id', session('dcategoria'));
        session()->remove('dcategoria');
    }
    return $query->paginate();
}

public function **scopeBuscadorLocalidad** (Builder $query) {
    if (session()->has('dlocalidad')){
        $query->where('localidad_id', session('dlocalidad'));
        session()->remove('dlocalidad');
    }
    return $query->paginate(21);
}

Как видите, эти это два метода, которые я создал в модели.

public function index (){
    **$destinos = Destino::buscadorcategoria();**
    $categorias = Categoria::paginate(6);
    $localidades = Localidad::all();
    return view('destinos.index', compact('destinos', 'categorias', 'localidades'));
}

И я думаю, что здесь проблема в контроллере: "$ destinos = Destino :: buscadorcategoria () ; "Я могу указать только 1 метод, в этом случае он фильтрует записи категорий, но если мне нужно отфильтровать по городам, я должен удалить метод категорий и указать город, что-то вроде" $ destinos = Destino :: buscadorlocalidad () ; "

Можете ли вы вызвать два метода в переменной $ destinos? Что вы могли бы сделать в этом случае? Мне нужно отфильтровать по категориям и по городам.

Я надеюсь, что вы можете мне помочь, большое спасибо всем.

1 Ответ

1 голос
/ 02 апреля 2020

Ваши области не должны возвращать "paginate", а только запрос:

public function scopeBuscadorCategoria (Builder $query) {
    if (session()->has('s')){
        $query->where('nombre', 'LIKE', "%". session('s') ."%");
    }
    if (session()->has('dcategoria')){
        $query->where('categoria_id', session('dcategoria'));
        session()->remove('dcategoria');
    }
    return $query;
}

public function scopeBuscadorLocalidad (Builder $query) {
    if (session()->has('dlocalidad')){
        $query->where('localidad_id', session('dlocalidad'));
        session()->remove('dlocalidad');
    }
    return $query;
}

И в вашем контроллере:

public function index (){
    $destinos = Destino::buscadorcategoria()->buscadorLocalidad()->paginate(21);
    $categorias = Categoria::paginate(6);
    $localidades = Localidad::all();
    return view('destinos.index', compact('destinos', 'categorias', 'localidades'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...