首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Items filter laravel口才

Items filter laravel口才
EN

Stack Overflow用户
提问于 2016-07-09 01:43:39
回答 4查看 15.2K关注 0票数 5

实现项目筛选器功能的最佳方式是什么?

我有一个包含一些项目的表,每个项目都有一些字段。

如何使用Laravel 5和Eloquent选择具有字段过滤功能的项目,如电子商务过滤?

EN

回答 4

Stack Overflow用户

发布于 2016-07-09 02:15:16

我一直使用雄辩的作用域来过滤雄辩的结果:https://laravel.com/docs/5.1/eloquent#query-scopes

你的控制器:

代码语言:javascript
复制
use App\Item;

class ItemController extends Controller
{
    public function index(Request $request)
    {
        $items = Item::name($request->name)->price($request->price)->paginate(25);

        return view('items.index', compact('items'));
    }
}

你的模型:

代码语言:javascript
复制
class Item extends Model
{
    public function scopeName($query, $name)
    {
        if (!is_null($name)) {
            return $query->where('name', 'like', '%'.$name.'%');
        }

        return $query;
    }

    public function scopePrice($query, $price)
    {
        if (!is_null($price)) {
            return $query->where(compact('price'));
        }

        return $query;
    }
}

你的视图:

代码语言:javascript
复制
<form action="{{ route('items.index') }}" method="get">
    <input type="text" name="price" />
    <input type="text" name="name" />
    <input type="submit" value="Search">
</form>

@foreach($items as $item)
    {{ $item->name }}
@endforeach

{!! $items->render() !!}

在您的作用域中,可以在限制查询结果之前检查给定值是否为null。这有效地允许用户搜索和过滤分页的结果。

您可以通过使用Laravel的Form Requests自动验证来进一步增强搜索,这样您就可以确保他们正在搜索的输入与您的查询的数据类型相匹配。

请记住,您将不得不修改getRedirectUrl()方法,因为您的用户将执行GET请求,并且默认情况下,getRedirectUrl()将包含GET URL参数,这将导致无限循环,因为其中一个参数未通过验证。

下面是一个使用上述代码的示例:

代码语言:javascript
复制
class ItemSearchRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'name' => 'nullable|string|min:2|max:100',
            'price' => 'nullable|numeric',
        ];
    }

    protected function getRedirectUrl()
    {
        return url('/items');
    }
}
票数 7
EN

Stack Overflow用户

发布于 2016-07-13 02:44:35

我在这里为此编写了一个包:https://github.com/Tucker-Eric/EloquentFilter

它允许您执行以下操作:

代码语言:javascript
复制
use App\Item;

class ItemController extends Controller
{
    public function index(Request $request)
    {
        $items = Item::filter($request->all())->paginateFilter(25);

        return view('items.index', compact('items'));
    }
}
票数 4
EN

Stack Overflow用户

发布于 2020-08-24 11:00:46

您可以使用package for regular index工作流对https://packagist.org/packages/abyss403/request-meta进行筛选、排序、搜索和分页

代码语言:javascript
复制
class UserController extends Controller
{
    ...
    public function index(Request $request){
        // Define model
        $model = new User();
        
        // Obtain collection based on request metadata
        $collection = \RequestMeta::load($model, $request)->data();
        
        // And just return it 
        return $collection;
       
        // OR using resources
        return new UserResourceCollection($collection);
    }
    ...
}

就这样

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38272593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档