aviator / eloquent-search-map
一个用于轻松搜索模型的Eloquent宏
Requires
- php: >=7.0.0
- aviator/array-map-keys: ^0.1.0
Requires (Dev)
- orchestra/testbench: ~3.4
- phpunit/phpunit: ~6.4.0
This package is auto-updated.
Last update: 2024-04-21 19:46:11 UTC
README
概览
使用此Eloquent宏轻松添加Eloquent查询搜索约束。
当你经常需要构建简单的可选搜索时,这特别方便。
$model::when($request->something, function (Builder $query) { return $query->where('column', 'like', '%' . $request->something . '%'); })->get();
使用此包,你可以这样做
$model::search(['something', 'otherthing'])->get();
你可以在模型上创建一个可选的列映射,以及动态映射请求属性。
安装
通过Composer
composer require aviator/eloquent-search-map
在你的 config/app.php
中,将 Aviator\Search\ServiceProvider::class
添加到 providers
数组
'providers' => [ ... Aviator\Search\ServiceProvider::class, ],
测试
通过Composer
composer test
使用方法
模型设置
首先,使你想要搜索的模型实现 Searchable
合同并使用 SearchableTrait
。
class User extends Model implements Searchable { use SearchableTrait; // ..etc }
然后在你的模型上设置一个包含你的可搜索列的 searches
数组属性。要使用 $model::search(['email'])
在电子邮件列中进行搜索
protected $searches = [ 'email' ];
要使用 $model::search(['alias'])
在电子邮件列中进行搜索
protected $searches = [ 'alias' => 'email' ];
请求别名
默认情况下,搜索构建器假定列名或别名与请求数据匹配。因此,如果你调用 $model::search(['something'])
,它将查找 request('something')
。
当然,你可以手动指定请求属性名称
$model::search(['email' => 'user_email'])->get();
这告诉搜索构建器在 request('user_email')
而不是默认情况下查找 email
请求数据。
自定义请求
如果你需要将自定义请求传递到宏中,请使用第二个参数,该参数接受一个扩展 Illuminate\Http\Request
的对象
$model::search(['term'], $request)->get();
当然,这是完全可选的。如果没有提供请求,它将从容器中检索。
相关模型
如果你想查询相关模型,你可以!使用点表示法
protected $searches = [ 'relation.column' ];
这将查找一个名为 company()
的关系方法,并在查询中添加一个 whereHas
约束。例如
$users = User::search(['company.city'])->get();
这将查找 User
模型上的关系 company()
并在该模型的 city
属性中进行搜索。
默认情况下,我们假设请求将具有相同的属性,即蛇形命名。对于上述查询约束,搜索构建器将查找 request('company_city')
。
这也可以进行映射
$users = User::search(['company.city' => 'city'])->get();
现在搜索构建器将查找 request('city')
而不是。
其他事项
许可证
此包使用 MIT 许可证 (MIT) 许可。