Настройте фильтрацию модели на основе параметров URL Laravel Eloquent

Я создаю RESTful API с помощью Laravel и пытаюсь разработать функцию, которая позволяет отправлять сложные запросы на основе параметров URL в мои модели баз данных.

Я нашел многообещающее хранилище, которое, похоже, реализует желаемую функциональность. https://github.com/heroicpixels/filterable

Я борюсь с пониманием обертки и черт. Я расширил свою модель, как указано в документации class Event extends Filterable {}, Но я не знаю, как правильно реализовать FilterableTrait а также FilterableWrapper.

Когда я ставлю use FilterableTrait внутри моего класса я получаю сообщение об ошибке

Heroicpixels \ Filterable \ Filterable \ Heroicpixels \ Filterable \ FilterableTrait определяют одно и то же свойство ($ filterable) в составе App \ Event. Это может быть несовместимо, чтобы улучшить удобство обслуживания вместо использования методов доступа в чертах. Класс был составлен

В настоящее время мой Событие модель выглядит так

<?php namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Carbon\Carbon;
use Heroicpixels\Filterable\Filterable;

class Event extends Filterable {

/*
use FilterableTrait;
*/

protected $dates = ['deleted_at','starts_at','ends_at'];

protected $fillable = [
'deleted_at',
'locale',
'sports_id',
'starts_at',
'ends_at',
'locations_id',
'creators_id',
'capacity',
'attendees',
'information',
'level',
'price',
'lat',
'lng'
];

protected $hidden = ['created_at','updated_at','deleted_at'];

public function creator() {
return $this->hasOne('App\User','id','creators_id');
}


public function scopeFuture($query)
{
return $query->where('starts_at', '>=', Carbon::now());
}

public function scopeFreespots($query)
{
return $query->where('capacity', '>', 'attendees');
}
}

Что мне не хватает? Как я могу реализовать Trait и Wrapper, чтобы мои параметры URL использовались в качестве параметров запроса?
Большое спасибо за вашу помощь!

0

Решение

Насколько я понимаю, вы должны выбрать только один метод (из трех).

Вы пытаетесь расширить класс Filterable И использовать эту черту. Если вы хотите использовать метод trait, вы должны расширить класс Eloquent.

Вероятно, лучше расширить класс Filterable, так как этот метод также используется в документации.

1

Другие решения

Я сталкивался с той же проблемой раньше. Это то, что я сделал в конечном итоге. давайте ваш API URL выглядит так

$url = /query?id=999&quantity=10&action=update&api=98546

в ваших маршрутах создайте маршрут, я использую, например, замыкание

route::get('/query/{name}',function($name){
$modal = $name;
$params = Request::all();
});

//output  products
{"id":"999","quantity":"10","action":"update","api":"98546"}

В вашем контроллере вы можете использовать switch case чтобы адаптировать эту любую модель и построить свой запрос из параметров URL.

0

По вопросам рекламы [email protected]