118 lines
3.3 KiB
PHP
Executable File
118 lines
3.3 KiB
PHP
Executable File
<?php
|
|
|
|
namespace app\model;
|
|
|
|
use Exception;
|
|
use think\db\exception\DataNotFoundException;
|
|
use think\db\exception\DbException;
|
|
use think\db\exception\ModelNotFoundException;
|
|
use think\facade\Db;
|
|
|
|
/**
|
|
* 文档模型字段
|
|
* Class ArchivesModelField
|
|
* @package app\model
|
|
*/
|
|
class ArchivesModelField extends Base
|
|
{
|
|
public const VIRTUAL_YES = 1;//虚拟字段 是
|
|
public const VIRTUAL_NO = 0;//虚拟字段 否
|
|
|
|
/**
|
|
* 模型添加字段列表
|
|
*
|
|
* @param int $modelId
|
|
* @param string $modelName
|
|
* @throws Exception
|
|
*/
|
|
public static function setFieldList(int $modelId, string $modelName)
|
|
{
|
|
if (self::where('model_id', $modelId)->count() <= 0) {
|
|
$rs = Db::query("SHOW FULL COLUMNS FROM ".Archives::ORIGINAL_TABLE);
|
|
$insert = [];
|
|
foreach ($rs as $val) {
|
|
$arr = [];
|
|
$arr['model_id'] = $modelId;
|
|
$arr['model'] = $modelName;
|
|
$arr['name'] = $val['Field'];
|
|
$arr['title'] = $val['Comment'];
|
|
$arr['remark'] = $val['Comment'];
|
|
$insert[] = $arr;
|
|
}
|
|
|
|
(new self())->saveAll($insert);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 同步字段
|
|
*
|
|
* @param int $modelId
|
|
* @param string $modelName
|
|
* @throws DataNotFoundException
|
|
* @throws DbException
|
|
* @throws ModelNotFoundException
|
|
*/
|
|
public static function syncFieldList(int $modelId, string $modelName)
|
|
{
|
|
$rs = Db::query("SHOW FULL COLUMNS FROM ".Archives::ORIGINAL_TABLE);
|
|
$oldFieldList = self::where('model_id', $modelId)->where('is_virtual', self::VIRTUAL_NO)->select();
|
|
$oldFields = $oldFieldList->column('name');
|
|
|
|
|
|
$newestFields = [];
|
|
foreach ($rs as $val) {
|
|
$newestFields[] = $val['Field'];
|
|
}
|
|
|
|
//待删除字段
|
|
$delete = array_diff($oldFields, $newestFields);
|
|
|
|
//待新增字段
|
|
$needInsertFields = array_diff($newestFields, $oldFields);
|
|
|
|
$insert = [];//新增字段
|
|
foreach ($rs as $val) {
|
|
if (in_array($val['Field'], $needInsertFields)) {
|
|
$arr = [];
|
|
$arr['model_id'] = $modelId;
|
|
$arr['model'] = $modelName;
|
|
$arr['name'] = $val['Field'];
|
|
$arr['title'] = $val['Comment'];
|
|
$arr['remark'] = $val['Comment'];
|
|
$insert[] = $arr;
|
|
}
|
|
}
|
|
|
|
(new self())->saveAll($insert);
|
|
(new self())->whereIn('name', $delete)->delete();
|
|
}
|
|
|
|
/**
|
|
* 各栏目[模型] 可展示字段列表
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function showFieldList(): array
|
|
{
|
|
$list = self::alias('amf')
|
|
->leftJoin('archives_category ac', 'ac.model_id = amf.model_id')
|
|
->field('amf.*, ac.id as category_id, ac.title as category_title')
|
|
->where('amf.status', self::COMMON_ON)
|
|
->where('ac.id', '>', 0)
|
|
->select();
|
|
|
|
$res = [];
|
|
|
|
$list = $list->toArray();
|
|
foreach ($list as $item) {
|
|
if (!isset($res[$item['category_id']])) {
|
|
$res[$item['category_id']] = [];
|
|
}
|
|
|
|
$res[$item['category_id']][] = $item['name'];
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
} |