Files
huangjingfen/pro_v3.5.1/crmeb/traits/SearchDaoTrait.php
2026-04-29 17:09:08 +08:00

89 lines
2.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// +----------------------------------------------------------------------
// | Author: ScottPan Team
// +----------------------------------------------------------------------
namespace crmeb\traits;
use app\services\dao\SearchConditionBuilder;
use app\dao\BaseDao;
use crmeb\basic\BaseModel;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
/**
* Trait SearchDaoTrait
* @package crmeb\traits
* @mixin BaseDao
*/
trait SearchDaoTrait
{
/**
* 搜索没有进入搜索器的自动进入where条件
* @param array $where
* @param bool $authWhere
* @return BaseModel
*/
public function searchWhere(array $where, bool $authWhere = true)
{
[$with, $whereKey] = app()->make(SearchConditionBuilder::class)->build(array_keys($where), $this->setModel());
$whereData = [];
foreach ($whereKey as $key) {
if (isset($where[$key]) && 'timeKey' !== $key) {
$whereData[$key] = $where[$key];
}
}
return $this->getModel()->withSearch($with, $where)->when($authWhere && $whereData, function ($query) use ($whereData) {
$query->where($whereData);
});
}
/**
* @param array $where
* @param bool $authWhere
* @return int
* @throws DbException
*/
public function count(array $where = [], bool $authWhere = true): int
{
return $this->searchWhere($where, $authWhere)->count();
}
/**
* 搜索
* @param array $where
* @param array|string[] $field
* @param int $page
* @param int $limit
* @param null $sort
* @param array $with
* @return array
* @throws DbException
* @throws DataNotFoundException
* @throws ModelNotFoundException
*/
public function getDataList(array $where, array $field = ['*'], int $page = 0, int $limit = 0, $sort = null, array $with = [])
{
return $this->searchWhere($where)->when($page && $limit, function ($query) use ($page, $limit) {
$query->page($page, $limit);
})->when(!$page && $limit, function ($query) use ($limit) {
$query->limit($limit);
})->when($sort, function ($query, $sort) {
if (is_array($sort)) {
foreach ($sort as $k => $v) {
if (is_numeric($k)) {
$query->order($v, 'desc');
} else {
$query->order($k, $v);
}
}
} else {
$query->order($sort, 'desc');
}
})->field($field)->with($with)->select()->toArray();
}
}