Yii框架生成CRUD代码后主键参数引用错误问题咨询
原因说明
出现该问题主要有两个常见诱因:
- 模型层主键配置错误
Gii生成CRUD代码的逻辑依赖对应ActiveRecord模型的主键配置。如果你生成Country模型时,对应数据库表还未将code字段设为主键,或是生成模型时Gii读取了旧的表结构缓存,就会导致models/Country.php中的primaryKey()方法错误返回['id'],后续生成CRUD时自然会沿用id作为主键参数。
你可以先检查Country.php文件中primaryKey()方法的返回值,确认和实际表主键匹配即可。 - Gii默认模板的固定设定
即便模型主键配置正确,Yii官方提供的默认CRUD生成模板硬编码了主键参数名为id,不管实际表主键是什么字段名,生成的控制器入参、视图跳转链接都会默认使用id作为参数名,属于模板的默认设计,并非功能故障。
规避方案
后续生成CRUD时可以提前做两处校验避免手动修改:
- 生成模型前确认表结构调整完毕,生成后先核对模型的主键、字段属性与数据库是否一致
- 可自定义Gii的CRUD生成模板,将主键参数的取值逻辑改为读取模型实际配置的主键字段,即可适配不同主键名的表。
内容的提问来源于stack exchange,提问作者Alan Sheers
相关产品推荐
相关产品推荐

