118 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			118 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?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; | ||
|  |     } | ||
|  | } |