You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.0 KiB
131 lines
4.0 KiB
10 months ago
|
<?php
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Author: CRMEB Team <admin@crmeb.com>
|
||
|
// +----------------------------------------------------------------------
|
||
|
namespace crmeb\services\crud;
|
||
|
|
||
|
|
||
|
use crmeb\services\crud\enum\SearchEnum;
|
||
|
|
||
|
/**
|
||
|
* Class Business
|
||
|
* @package crmeb\services
|
||
|
*/
|
||
|
class Dao extends Make
|
||
|
{
|
||
|
/**
|
||
|
* 当前命令名称
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $name = "dao";
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
* @author 等风来
|
||
|
* @email 136327134@qq.com
|
||
|
* @date 2023/4/4
|
||
|
*/
|
||
|
protected function setBaseDir(): string
|
||
|
{
|
||
|
return 'app' . DS . 'dao' . DS . 'crud';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 执行替换
|
||
|
* @param string $name
|
||
|
* @param array $options
|
||
|
* @return Dao
|
||
|
* @author 等风来
|
||
|
* @email 136327134@qq.com
|
||
|
* @date 2023/8/3
|
||
|
*/
|
||
|
public function handle(string $name, array $options = [])
|
||
|
{
|
||
|
$this->setSearchDaoPhpContent($options['searchField'] ?? []);
|
||
|
return parent::handle($name, $options);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取搜索dao的php代码
|
||
|
* @param array $fields
|
||
|
* @return Dao
|
||
|
* @author 等风来
|
||
|
* @email 136327134@qq.com
|
||
|
* @date 2023/8/3
|
||
|
*/
|
||
|
protected function setSearchDaoPhpContent(array $fields)
|
||
|
{
|
||
|
$templateContent = file_get_contents($this->getStub('search'));
|
||
|
$contentSearchPhp = '';
|
||
|
foreach ($fields as $item) {
|
||
|
$tab2 = $this->tab(2);
|
||
|
$contentStr = <<<CONTENT
|
||
|
->when(!empty(\$where['$item[field]']), function(\$query) use (\$where) {
|
||
|
$tab2 \$query->{%WHERE%}('$item[field]', '{%SEARCH%}', \$where['$item[field]']);
|
||
|
$tab2})
|
||
|
CONTENT;
|
||
|
if (isset($item['search']) && $item['search']) {
|
||
|
|
||
|
switch ($item['search']) {
|
||
|
case SearchEnum::SEARCH_TYPE_EQ:
|
||
|
case SearchEnum::SEARCH_TYPE_GTEQ:
|
||
|
case SearchEnum::SEARCH_TYPE_LTEQ:
|
||
|
case SearchEnum::SEARCH_TYPE_NEQ:
|
||
|
$contentSearchPhp .= str_replace([
|
||
|
'{%WHERE%}',
|
||
|
'{%SEARCH%}'
|
||
|
], [
|
||
|
'where',
|
||
|
$item['search']
|
||
|
], $contentStr);
|
||
|
break;
|
||
|
case SearchEnum::SEARCH_TYPE_LIKE:
|
||
|
$contentSearchPhp .= <<<CONTENT
|
||
|
->when(!empty(\$where['$item[field]']), function(\$query) use (\$where) {
|
||
|
$tab2 \$query->whereLike('$item[field]', '%'.\$where['$item[field]'].'%');
|
||
|
$tab2})
|
||
|
CONTENT;
|
||
|
break;
|
||
|
case SearchEnum::SEARCH_TYPE_BETWEEN:
|
||
|
$contentSearchPhp .= <<<CONTENT
|
||
|
->when(!empty(\$where['$item[field]']), function(\$query) use (\$where) {
|
||
|
$tab2 \$query->whereBetween('$item[field]', \$where['$item[field]']);
|
||
|
$tab2})
|
||
|
CONTENT;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->value['CONTENT_PHP'] = str_replace(['{%CONTENT_SEARCH_PHP%}'], [$contentSearchPhp . ';'], $templateContent);
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 模板文件
|
||
|
* @param string $type
|
||
|
* @return string
|
||
|
* @author 等风来
|
||
|
* @email 136327134@qq.com
|
||
|
* @date 2023/3/13
|
||
|
*/
|
||
|
protected function getStub(string $type = '')
|
||
|
{
|
||
|
$daoPath = __DIR__ . DS . 'stubs' . DS . 'dao' . DS;
|
||
|
|
||
|
$stubs = [
|
||
|
'dao' => $daoPath . 'crudDao.stub',
|
||
|
'search' => $daoPath . 'search.stub',
|
||
|
];
|
||
|
|
||
|
return $type ? $stubs[$type] : $stubs['dao'];
|
||
|
}
|
||
|
}
|