列表页面有很多查询,这里进行封装
<?php
namespace App\Utils;
use Hyperf\Database\Model\Builder;
use Hyperf\Utils\Collection;
class WhereBuildUtils
{
public const OPERATOR = [
'=',
'<',
'>',
'<=',
'>=',
'<>',
'!=',
'<=>',
'like',
'like binary',
'not like',
'ilike',
'&',
'|',
'^',
'<<',
'>>',
'rlike',
'regexp',
'not regexp',
'~',
'~*',
'!~',
'!~*',
'similar to',
'not similar to',
'not ilike',
'~~*',
'!~~*',
];
/**
* @param $builder
* @param array $array
* @return mixed|Collection|Builder
*/
public static function bind($builder, Array $array)
{
/**@var Builder $builder */
if ($array) {
foreach ($array as $key => $item) {
switch (gettype($item)) {
case 'integer':
case 'string':
case 'double':
case 'float':
case 'boolean':
if ($item) {
$builder = $builder->where($key, $item);
}
break;
case 'array':
$value = $item[0] ?? '';
$operator = $item[1] ?? null;
$column = $item[2] ?? $key;
if ($value) {
if (in_array($operator, self::OPERATOR, false)) {
$builder = $builder->where($column, $operator, $value);
break;
}
if (in_array($operator, ['in', 'IN'])) {
$builder = $builder->whereIn($column, $value);
break;
}
if (in_array($operator, ['not in', 'NOT IN'])) {
$builder = $builder->whereNotIn($column, $value);
break;
}
if (in_array($operator,['BETWEEN','between'])) {
$builder = $builder->whereBetween($column,$value);
break;
}
}
break;
}
}
}
return $builder;
}
}
运用:
WhereBuildUtils::bind(Model::query(),['status' => $request->input('status'),
'store' => [$request->input('store',[]),'in'],
])