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.
130 lines
4.0 KiB
130 lines
4.0 KiB
<?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'];
|
|
}
|
|
}
|
|
|