资讯专栏INFORMATION COLUMN

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

chuyao / 2995人阅读

摘要:是一个优雅的框架,但并不代表你写的业务代码也同样优雅。这里提到了两个插件,主要介绍下后者,改动的部分可以很好支持此插件。控制器控制器方面只需简单的行即可,插件会解析请求参数,但是解析的是特定形式的查询参数,如。

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继承PrettusRepositoryEloquentBaseRepository,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":模糊搜索 --}}

{{-- 搜索关联表的联系电话字段 --}}

{{-- 创建区间查询 created_at between "2018-01-01" and "2018-01-17" --}}

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

结语

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28166.html

相关文章

  • 下载量最高「50 」个 Laravel 扩展包

    摘要:简介另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态该项目统计了目前下载量最高的个扩展包。记得哟相信下面这些扩展包会让你的编码更加高效。排名下载量排名包地址下载次数描述图片处理。 简介 Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态 ———— @Summer 该项目统计了目前 pack...

    liaorio 评论0 收藏0
  • Laravel Telescope:优雅应用调试工具

    摘要:文章转自视频教程优雅的应用调试工具新扩展是由和开源的应用的调试工具。计划任务列出已运行的计划任务。该封闭函数会被序列化为一个长字符串,加上他的哈希与签名如出一辙该功能将记录所有异常,并可查看具体异常情况。事件显示所有事件的列表。 文章转自:https://laravel-china.org/topics/19013视频教程:047. 优雅的应用调试工具--laravel/telesco...

    MasonEast 评论0 收藏0
  • 2015 年度小结(技术方面)

    摘要:因为路由层面受业务影响很大,经常修改一些功能的行为,所以后来大部分测试都是针对层面的单元测试。在我了解的过程中,我发现中文网络上对的讨论非常分散,于是我创建了中文社区,到年末已经有个注册用户和个帖子了。 https://jysperm.me/2016/02/programming-of-2015/ 从 2014 年末开始开发的一个互联网金融项目终于在今年三月份上线了,这是一个 Node...

    宋华 评论0 收藏0
  • 2015 年度小结(技术方面)

    摘要:因为路由层面受业务影响很大,经常修改一些功能的行为,所以后来大部分测试都是针对层面的单元测试。在我了解的过程中,我发现中文网络上对的讨论非常分散,于是我创建了中文社区,到年末已经有个注册用户和个帖子了。 https://jysperm.me/2016/02/programming-of-2015/ 从 2014 年末开始开发的一个互联网金融项目终于在今年三月份上线了,这是一个 Node...

    Nosee 评论0 收藏0
  • Laravel关联模型中过滤结果为空结果集(has和with区别)

    摘要:但有些结果不是我想要的注意返回了为空的数据记录中有的有记录,有的为空。它会有两条查询,第一条查主数据,第二条查关联,这里第二条如下如果第二条为空,主记录的关联字段就是。 首先看代码: $userCoupons = UserCoupons::with([coupon => function($query) use($groupId){ return $query->select(...

    Songlcy 评论0 收藏0

发表评论

0条评论

chuyao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<