diff --git a/app/admin/service/curd/BuildCurd.php b/app/admin/service/curd/BuildCurd.php index c1ae4f0..150a0a4 100644 --- a/app/admin/service/curd/BuildCurd.php +++ b/app/admin/service/curd/BuildCurd.php @@ -355,6 +355,7 @@ class BuildCurd if (!empty($bindSelectField) && !in_array($bindSelectField, array_column($columns, 'Field'))) { throw new TableException("关联表{$relationTable}不存在该字段: {$bindSelectField}"); } + $onlyFields = []; foreach ($columns as $vo) { if (empty($primaryKey) && $vo['Key'] == 'PRI') { $primaryKey = $vo['Field']; @@ -362,6 +363,7 @@ class BuildCurd if (!empty($onlyShowFields) && !in_array($vo['Field'], $onlyShowFields)) { continue; } + if (!empty($onlyShowFields)) $onlyFields[] = $vo['Field']; $colum = [ 'type' => $vo['Type'], 'comment' => $vo['Comment'], @@ -388,6 +390,7 @@ class BuildCurd 'bindSelectField' => $bindSelectField, 'delete' => $delete, 'tableColumns' => $formatColumns, + 'onlyFields' => $onlyFields, ]; if (!empty($bindSelectField)) { $relationArray = explode('\\', $modelFilename); @@ -1038,7 +1041,7 @@ class BuildCurd $relationCode = ''; foreach ($this->relationArray as $key => $val) { $relation = CommonTool::lineToHump($key); - $relationCode = "->withJoin('{$relation}', 'LEFT')\r"; + $relationCode = "with(['{$relation}'])"; if (!empty($val['bindSelectField']) && !empty($val['primaryKey'])) { $constructRelation = '$notes["' . lcfirst($val['foreignKey']) . '"] = \app\admin\model\\' . $val['modelFilename'] . '::column("' . $val['bindSelectField'] . '", "' . $val['primaryKey'] . '");'; } @@ -1092,16 +1095,17 @@ class BuildCurd $relationList = ''; if (!empty($this->relationArray)) { foreach ($this->relationArray as $key => $val) { - $relation = CommonTool::lineToHump($key); - // $relationCode = CommonTool::replaceTemplate( - // $this->getTemplate("model{$this->DS}relation"), - // [ - // 'relationMethod' => $relation, - // 'relationModel' => "\app\admin\model\\{$val['modelFilename']}", - // 'foreignKey' => $val['foreignKey'], - // 'primaryKey' => $val['primaryKey'], - // ]); - // $relationList .= $relationCode; + $relation = CommonTool::lineToHump($key); + $relationCode = CommonTool::replaceTemplate( + $this->getTemplate("model{$this->DS}relation"), + [ + 'relationMethod' => $relation, + 'relationModel' => "{$val['modelFilename']}::class", + 'foreignKey' => $val['primaryKey'], + 'primaryKey' => $val['foreignKey'], + 'relationFields' => empty($val['onlyFields']) ? "" : "->field('{$val['primaryKey']}," . implode(',', $val['onlyFields']) . "')", + ]); + $relationList .= $relationCode; } } diff --git a/app/admin/service/curd/templates/controller/controller.code b/app/admin/service/curd/templates/controller/controller.code index 009a7d3..84ca98d 100644 --- a/app/admin/service/curd/templates/controller/controller.code +++ b/app/admin/service/curd/templates/controller/controller.code @@ -17,8 +17,9 @@ class {{controllerName}} extends AdminController { parent::__construct($app); self::$model = {{modelFilename}}::class; - $this->notes = $notes = self::$model::$notes; + $notes = self::$model::$notes; {{constructRelation}} + $this->notes =$notes; $this->assign(compact('notes')); } diff --git a/app/admin/service/curd/templates/controller/indexMethod.code b/app/admin/service/curd/templates/controller/indexMethod.code index e69de29..c712426 100644 --- a/app/admin/service/curd/templates/controller/indexMethod.code +++ b/app/admin/service/curd/templates/controller/indexMethod.code @@ -0,0 +1,21 @@ + + #[NodeAnnotation(title: '列表', auth: true)] + public function index(\app\Request $request): \think\response\Json|string + { + if ($request->isAjax()) { + if (input('selectFields')) { + return $this->selectList(); + } + list($page, $limit, $where) = $this->buildTableParams(); + $count = self::$model::where($where)->count(); + $list = self::$model::where($where)->{{relationIndexMethod}}->page($page, $limit)->order($this->sort)->select()->toArray(); + $data = [ + 'code' => 0, + 'msg' => '', + 'count' => $count, + 'data' => $list, + ]; + return json($data); + } + return $this->fetch(); + } \ No newline at end of file diff --git a/app/admin/service/curd/templates/model/model.code b/app/admin/service/curd/templates/model/model.code index 25ea98a..6054eb9 100644 --- a/app/admin/service/curd/templates/model/model.code +++ b/app/admin/service/curd/templates/model/model.code @@ -18,4 +18,6 @@ class {{modelName}} extends TimeModel public static array $notes = {{selectArrays}}; + {{relationList}} + } \ No newline at end of file diff --git a/app/admin/service/curd/templates/model/relation.code b/app/admin/service/curd/templates/model/relation.code index 933c932..12672d8 100644 --- a/app/admin/service/curd/templates/model/relation.code +++ b/app/admin/service/curd/templates/model/relation.code @@ -1,5 +1,5 @@ public function {{relationMethod}}() { - return $this->belongsTo('{{relationModel}}', '{{foreignKey}}', '{{primaryKey}}'); + return $this->hasOne({{relationModel}}, '{{foreignKey}}', '{{primaryKey}}'){{relationFields}}; }