使Laravel筛选查询更优雅的插件l5-repository

Laravel是一个优雅的框架,但并不代表你写的业务代码也同样优雅。
你的代码中是否还存在如下类似代码:

//是否绑定
if (isset($param['bind']) and $param['bind'] != '-1') {
    $t  = $param['bind'] == 1 ? '!=' : '=';
    $rs = $rs->where('user_id', $t, 0);
}


//是否激活
if (isset($param['active_time']) and $param['active_time'] != '-1') {
    $t  = $param['active_time'] == 1 ? '>=' : '<';
    $rs = $rs->where('active_time', $t, '1999-01-01');
}


if (isset($param['dealer']) && !empty($param['dealer'])) {
    $rs = $rs->whereHas('dealer', function ($query) use ($param) {
        $query->where('name', 'like', '%'.$param['dealer'] . '%')
        ->orWhere('dealer_id', '=', $param['dealer']);
    });
}

当业务需求要加多个查询条件的时候,往往需要改前端页面和后端页面,前端加input框,后端加if条件。

本文分享下l5-repository(原作者) / l5-repository(本文作者改后)插件,ps:虽然目前原作者已不维护了,不过貌似招了些自愿者去维护,不影响基本使用。这里提到了两个l5插件,主要介绍下后者,改动的部分可以很好支持此插件。

repository模式

此插件实现了repository层,业务逻辑相关的代码放在repository中实现,所有的repository继承公共repository,公共repository继承\Prettus\Repository\Eloquent\BaseRepository,repository模式不了解的点这里

控制器

控制器方面只需简单的2行即可,插件会解析请求参数,但是解析的是特定形式的查询参数,如: /users?search=user_name:133;created_at:2018-01-01,2018-01-17&searchFields=user_name:like;created_at:between

public function index(Request $request)
{
    $this->userRepository->pushCriteria(new RequestCriteria($request));
    $users= $this->userRepository->paginate();
}

视图

视图方面原作者只是举了几个例子,并没提供相关js去拼成后端识别的格式,所以想依靠控制器两行代码简化查询还得做些工作,本文作者不忍心这插件由于这点瑕疵而弃用,于是自己fork了个然后写了一坨jquery去支持它。于是,视图代码如下即可:

{{-- 搜索本表的user_name字段 data-search-type="like":模糊搜索 --}}
<input data-search-type="like" name="user_name"  type="text">
{{-- 搜索关联表的联系电话字段 --}}
<input data-search-type="like" name="userAddress.tel"  type="text">
{{-- 创建区间查询 created_at between '2018-01-01' and '2018-01-17' --}}
<input data-search-type=">=" data-is-between="1" name="created_at" type="text">
<input data-search-type="<=" data-is-between="1" name="created_at" type="text">

写的那段jquery便可自动将表单参数拼成l5-repositoy识别的格式,后续加新的筛选条件只要前端加input即可。

结语

第一次分享技术文,有写的不到位的地方欢迎指出,谢谢~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值