elfif / metasearch_l5
此软件包的最新版本(dev-master)没有可用的许可证信息。
dev-master
2020-07-21 16:01 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: 4.3.*
This package is not auto-updated.
Last update: 2024-09-28 17:49:18 UTC
README
概览
Metasearch是一个Laravel 5的软件包,它允许您轻松创建与搜索表单匹配的Eloquent查询。通过在搜索表单输入字段名称中使用关键词列表,Metasearch_l5将自动创建相应的查询。它大致是activerecord-hackery/meta_search的一个移植版本。目前我正在很多REST web服务中使用它,因为它在需要一些搜索功能时提供了很大的灵活性。
以下是一个简单的示例
首先是搜索表单
{{ Form::open(['url' => URL::route('cars.search')]) }}
{{ Form::label('year : ') }}
{{ Form::text('year_equals') }}
{{ Form::label('minumum horsepower : ') }}
{{ Form::text('horsepower_greater_than') }}
{{ Form::label('maximum horsepower : ') }}
{{ Form::text('horsepower_less_than') }}
{{ Form::submit('submit') }}
{{ Form::close() }}
然后在您的CarsController中
$input = Request::all();
$query = Search::getQuery(Car::getQuery(), $input);
$cars = $query->get();
return view('cars.index', ['cars' => $cars]);
就是这样,getQuery方法将根据输入内容创建查询。
安装
首先将依赖项添加到您的composer.json文件中
"require": {
"elfif/MetaSearch_L5" : "*"
}
然后执行composer install。
然后编辑您的app.php文件。为此软件包添加服务提供者
'Elfif\MetaSearch\MetaSearchServiceProvider'
并添加外观
'Search' => 'Elfif\MetaSearch\Facades\Search'
现在您可以开始了!!
语法
以下是所有可以在LaraSearch中使用的关键词列表,根据它们的数据类型
所有数据类型
- equals (别名: eq) - 如其名所示。
- does_not_equal (别名 : _noteq) - 与equals相反,奇怪的是。
- is_in - 接受一个数组,匹配数组中的任何项。
- is_not_in - 与上述类似,但取反。
- is_null - 列有SQL NULL值。
- is_not_null - 列不包含NULL。
字符串
- _contains - 子串匹配。
- _does_not_contain - 负面的子串匹配。
- _starts_with (别名: _sw) - 匹配以输入项开始的字符串。
- _does_not_start_with (别名: _dnsw) - 与上述相反。
- _ends_with (别名: _ew) - 匹配以输入项结束的字符串。
- _does_not_end_with (别名: _dnew) - 与上述相反。
数字、日期和时间
- _greater_than (别名: _gt) - 大于。
- _greater_than_or_equal (别名: _gteq) - 大于等于。
- _less_than (别名: _lt) - 小于。
- _less_than_or_equal (别名: _lteq) - 小于等于。
布尔值
- _is_true - 为真。对于复选框如“仅显示管理员用户”很有用。
- _is_false - _is_true的补充。
非布尔数据类型
- _is_present - 与_is_true类似,用于复选框。非NULL或空字符串。
- _is_blank - 返回在列中具有NULL或空字符串值的记录。
OR条件
如果您想匹配多个可能的列中的一个,您可以这样做
{{ Form::label('name : ') }}
{{ Form::text('name_or_brand_equals') }}
请记住,条件对所有列都是相同的。
查询关系存在性
简单情况
您也可以使用“exist”关键字检查关系是否存在。假设我们的汽车模型中有一个名为accessories的关系
public function accessories(){
return $this->hasMany('App\Accessory');
}
我们可以这样请求该关系是否存在,使用关键字"_exists"(或_short)
{{ Form::label('has accessories : ') }}
{{ Form::checkbox('accessories_exists') }}
如果复选框被选中,它将添加该条件到查询构建器
->has('accessories');
带计数
您还可以指定一个操作符和计数,进一步使用关键字"_count"(或co)加上一个关键字来定义条件自定义查询
{{ Form::label('has accessories : ') }}
{{ Form::text('accessories_count_greater_than') }}
将翻译成
->has('accessories', '>=', $value);
完整条件
如果您需要更细粒度的控制关系中的条件,可以使用这种表示法,关系和字段名之间用点分隔,后面跟着条件
{{ Form::label('accessories : ') }}
{{ Form::text('accessories.type_contains') }}
它将被翻译为
->whereHas('accessories', function($query){
return $query->where('type', 'like', '%'.$value.'%');
});