设置Laravel Eloquent基于URL参数的模型过滤


Setup Laravel Eloquent URL parameter based model filtering

我正在用Laravel构建一个RESTful API,我正在尝试开发一个功能,它允许基于URL参数向我的数据库模型发送复杂的查询。

我发现了一个很有前途的存储库,它似乎实现了想要的功能。https://github.com/heroicpixels/filterable

我很难理解包装器和特性。我像文档class Event extends Filterable {}中提到的那样扩展了我的模型。但是我不知道如何正确实现FilterableTraitFilterableWrapper

当我将use FilterableTrait放入我的类中时,我得到一个错误说

Heroicpixels'Filterable'Filterable和Heroicpixels'Filterable'FilterableTrait在App'Event的组合中定义了相同的属性($ Filterable)。这可能是不兼容的,为了提高可维护性,可以考虑在trait中使用访问器方法。类组成

目前我的事件模型看起来像这样

<?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和包装器,使我的URL参数被用作查询参数?非常感谢你的帮助!

据我所知,你必须从三种方法中选择一种。

您正在尝试扩展Filterable类并使用该trait。如果你想使用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参数构建你的查询。