laravel扩展包推荐:SearchModel更方便的处理查询类请求

最近挺闲的,就把一直使用的用来处理查询类请求的方法整理了一下,做了个扩展包。各位大佬给提提意见(轻点喷,我还是个孩子)

废话不多说,先看效果

使用后可大大减少代码量!

开源地址:GitHub - wyzheng1997/search-model: 使laravel ORM拥有快速处理请求搜索的能力

不喜勿喷,欢迎star

安装

composer require wyzheng/search-model

使用

目前支持的查询类型有:like​, =​, >​, <​, >=​, <​, !=​, in​, between​。

常规使用

// https://example.com/api/articles?title=test&category_id=5&created_at=2020-01-01,2021-01-02&user_id=1,2,3
$articles = Article::search([,
    'title' => 'like', // 声明数据库title字段模糊搜索
    'category_id' => '=', // 声明数据库category_id字段精确搜索
    'created_at' => 'between' // 支持get数组参数或开始和结束用逗号隔开的形式
    'user_id' => 'in' // 支持get数组参数或逗号隔开的形式
])->get();

自定义请求参数

当数据库字段和请求字段不同时,可以显式声明请求字段名

// https://example.com/api/articles?text=test&cate_id=5
$articles = Article::search([
    'title' => ['like', 'text'], 
    'category_id' => ['=', 'cate_id'],
])->get();

跨表查询

当查询的字段是关联表的字段时,可以使用.​的方式指定

// https://example.com/api/articles?title=test&author_name=jack
$articles = Article::search([
    'title' => 'like', 
  
    // 当没有显式声明请求字段时,会自动拼接author_name
    // 支持无限层级关联 author.company.name, 默认值 $request->input('author_company_name')
    'author.name' => '=', 
])->get();
 

自定义查询

可以通过自定义查询方法来实现更复杂的查询

// https://example.com/api/articles?title=test&type=1,2
$articles = Article::search([
    'title' => 'like', 
  
    // $value = $request->input('type');
    'type' => fn ($query, $value) => $query->whereNotIn('type', explode(',', $value)),
])->get();

预加载

search方法支持传入第二个参数(array),和原with使用方法一致,可以指定预加载的字段

$articles = Article::search([
    'title' =>'like', 
], ['author' => function($author) {
    $author->select('id', 'name');
}])->get();

查询排序

本扩展包还简单实现的查询排序功能sort​

// https://example.com/api/articles?title=test&sort_by=asc(id),desc(author_level)
$articles = Article::search([
    'title' => 'like', 
])->sort(['id', 'author_level' => function($query, $direction) {
    // $direction 取值 'asc' 或 'desc'
    $query->orderByRaw('.......')
}])->get();

此扩展只能解决理想状态下的简单查询,项目中对于复杂查询还是老老实实的自己写把。

题外话

一直听人说现在大环境不好,现在算是体会到了,天天在公司没事干,就想起来2016年就注册的公众号了,打算日更(就写着玩,练习写作思维,也不知道能坚持多久),感兴趣的可以关注一下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值