【发布时间】:2018-12-16 14:31:45
【问题描述】:
我正在学习 Yii,我想知道我是否使用 Gii 生成模型和 CRUD 文件,然后我手动修改了这些文件,然后我更改了我的数据库,是否应该再次运行 Gii?它会覆盖我在模型文件中的更改吗?如果是这样,在不丢失我以前的更改的情况下更新我的模型、控制器和视图文件以反映数据库中的更改的最佳解决方案是什么?
【问题讨论】:
我正在学习 Yii,我想知道我是否使用 Gii 生成模型和 CRUD 文件,然后我手动修改了这些文件,然后我更改了我的数据库,是否应该再次运行 Gii?它会覆盖我在模型文件中的更改吗?如果是这样,在不丢失我以前的更改的情况下更新我的模型、控制器和视图文件以反映数据库中的更改的最佳解决方案是什么?
【问题讨论】:
Gii 的设计初衷是为您提供基本代码,然后您可以根据需要对其进行修改。
是的,如果您再次运行它,它将覆盖您的文件(但您需要明确选中“覆盖”复选框)。
所以推荐的做法是先尽可能完整地设计数据库结构,然后用 Gii 生成模型/CRUD/。
然后在没有 Gii 的情况下手动完成后续更改。
一个小提示:如果你再次运行 Gii,你可以在 diff 中查看变化并手动复制它们。
一旦你获得更多经验,你很可能会意识到没有必要这样做。
【讨论】:
您问题的真正解决方案是由 Gii 生成所有初始模型,并将它们原封不动地保存在单独的目录中,例如 app\models\base
并将这些模型命名为 ModelNameBase
在 app\models 中创建您自己的模型,例如 ModelName 让 app\models 扩展基本模型。
这样您就可以随意修改 app\models。
每当您有数据库更改时,重新生成基本模型。
【讨论】: