Я создаю 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 использовались в качестве параметров запроса?
Большое спасибо за вашу помощь!
Насколько я понимаю, вы должны выбрать только один метод (из трех).
Вы пытаетесь расширить класс Filterable И использовать эту черту. Если вы хотите использовать метод trait, вы должны расширить класс Eloquent.
Вероятно, лучше расширить класс Filterable, так как этот метод также используется в документации.
Я сталкивался с той же проблемой раньше. Это то, что я сделал в конечном итоге. давайте ваш 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.