multi-store/app/common/lists/ListsSearchTrait.php

121 lines
4.7 KiB
PHP
Raw Normal View History

2024-05-30 21:37:55 +08:00
<?php
namespace app\common\lists;
trait ListsSearchTrait
{
protected $params;
protected $searchWhere = [];
/**
* @notes 搜索条件生成
* @param $search
* @return array
* @author 令狐冲
* @date 2021/7/7 19:36
*/
private function createWhere($search)
{
if (empty($search)) {
return [];
}
$where = [];
$class_key = $this->request->__get('class_key');
if ($class_key !== null) {
foreach ($class_key as $key => $value) {
if (isset($search[$key])) {
foreach ($value as $v) { // 遍历class_key的值添加到search数组中
2024-05-30 21:37:55 +08:00
array_push($search[$key], $v); // 添加class_key的搜索条件
}
} else {
2024-05-30 21:37:55 +08:00
$search[$key] = [$value[0]]; // 创建新的搜索条件
}
}
}
$class_value = $this->request->__get('class_value'); // 获取class_value的值
if ($class_value !== null) {
$this->params = array_merge($this->params, $class_value);
2024-05-30 21:37:55 +08:00
}
foreach ($search as $whereType => $whereFields) {
switch ($whereType) {
case '=':
case '<>':
case '>':
case '>=':
case '<':
case '<=':
case 'in':
foreach ($whereFields as $whereField) {
$paramsName = substr_symbol_behind($whereField);
if (!isset($this->params[$paramsName]) || $this->params[$paramsName] == '') {
continue;
}
$where[] = [$whereField, $whereType, $this->params[$paramsName]];
}
break;
case '%pipe_like%':
foreach ($whereFields as $k=>$whereField) {
$paramsName = substr_symbol_behind($whereField);
if (!isset($this->params[$k]) || empty($this->params[$k])) {
continue;
}
$where[] = [$whereField, 'like', '%' . $this->params[$k] . '%'];
}
break;
2024-05-30 21:37:55 +08:00
case '%like%':
foreach ($whereFields as $whereField) {
$paramsName = substr_symbol_behind($whereField);
if (!isset($this->params[$paramsName]) || empty($this->params[$paramsName])) {
continue;
}
$where[] = [$whereField, 'like', '%' . $this->params[$paramsName] . '%'];
}
break;
case '%like':
foreach ($whereFields as $whereField) {
$paramsName = substr_symbol_behind($whereField);
if (!isset($this->params[$paramsName]) || empty($this->params[$paramsName])) {
continue;
}
$where[] = [$whereField, 'like', '%' . $this->params[$paramsName]];
}
break;
case 'like%':
foreach ($whereFields as $whereField) {
$paramsName = substr_symbol_behind($whereField);
if (!isset($this->params[$paramsName]) || empty($this->params[$paramsName])) {
continue;
}
$where[] = [$whereField, 'like', $this->params[$paramsName]];
}
break;
case 'between_time':
if (!is_numeric($this->startTime) || !is_numeric($this->endTime)) {
break;
}
$where[] = [$whereFields, 'between', [$this->startTime, $this->endTime]];
break;
case 'between':
if (empty($this->start) || empty($this->end)) {
break;
}
$where[] = [$whereFields, 'between', [$this->start, $this->end]];
break;
case 'find_in_set': // find_in_set查询
foreach ($whereFields as $whereField) {
$paramsName = substr_symbol_behind($whereField);
if (!isset($this->params[$paramsName]) || $this->params[$paramsName] == '') {
continue;
}
$where[] = [$whereField, 'find in set', $this->params[$paramsName]];
}
break;
}
}
return $where;
}
}