一个我觉得超级好用的根据request 过滤数据的包

详见文档,欢迎 star

github.com/hooklife/larave-query-b...

使用 QueryBuilder

 User::queryBuilder($request->all())->get()

编写 QueryBuilder

用户请求的参数 user_id 会默认映射到方法 UserId上,并且方法接受的参数 $value 为用户请求中user_id 的值

namespace App\QueryBuilders;

use Hooklife\QueryBuilder\QueryBuilder;

class UserQueryBuilder extends QueryBuilder
{
    public function userId($value){
        $this->query->where('user_id',$value)
    }
}

其它插件

filterable

namespace App\QueryBuilders;
use Hooklife\QueryBuilder\Concerns\Filterable;
class UserQueryBuilder extends QueryBuilder
{
    use Filterable;
    public array $simpleFilters = [
        'name' => ['like','%?%']
        'status'
    ];
}

以上的例子相当于

namespace App\QueryBuilders;
class UserQueryBuilder extends QueryBuilder
{
    public function name($value){
        $this->query->where('name','like','%'.$value.'%');
    } 

    public function status($value){
        $this->query->where('status',$value);
    }
}

sortable

namespace App\QueryBuilders;
use Hooklife\QueryBuilder\Concerns\Sortable;
class UserQueryBuilder extends QueryBuilder
{
    use Sortable;
    protected $sortPrefix = 'sort_'
    public array $simpleSorts = [
        'name',
        'created_at' => 'desc'
    ];
}

以上的例子相当于

namespace App\QueryBuilders;
class UserQueryBuilder extends QueryBuilder
{
    public function boot(){
        $this->query->sortBy('created_at','desc');
    }
    public function sortName($value){
        $this->query->orderBy('name',$value);
    } 

}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4

你这个跟modelFilter差不多呀

<?php

namespace Modules\Invitation\ModelFilters;

use EloquentFilter\ModelFilter;

class MaterialBannerFilter extends ModelFilter
{
    protected $drop_id = false;

    /**
     * 查询数据来源
     *
     * @param string $source
     *
     * @return MaterialBannerFilter
     */
    public function source(string $source): MaterialBannerFilter
    {
        return $this->where('source', $source);
    }

    /**
     * 查询开启状态
     *
     * @param int $isOpen
     *
     * @return MaterialBannerFilter
     */
    public function isOpen(int $isOpen): MaterialBannerFilter
    {
        return $this->where('is_open', $isOpen);
    }
}

在相关model里配置过滤器

/**
 * 指定过滤器
 *
 * @return string|null
 */
public function modelFilter(): ?string
{
    return $this->provideFilter(MaterialCategoryFilter::class);
}

调用的时候这样调用

// 获取素材列表
$query = MaterialModel::filter([
    'source' => 1,
    'is_open' => 2,
]);
11个月前 评论
hooklife (楼主) 11个月前
hooklife (楼主) 11个月前
冯小胖同学 (作者) 11个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!