在 yii2-advanced 项目中,为模型新增数据库字段后出现 “getting unknown property” 错误,通常是因启用的数据库 schema 缓存未及时更新所致;执行 `yii::$app->cache->flush()` 可强制清除缓存并使新字段生效。
当您在数据库表中已成功

Yii2 在启用 'enableSchemaCache' => true(通常配置于 common/config/main-local.php 的 db 组件中)时,会将数据库表结构(包括字段名、类型、主键等)缓存至应用缓存(如文件缓存、Redis 或 APCu)。该缓存不会自动感知数据库 DDL 变更(如 ALTER TABLE ADD COLUMN),因此模型在构建 ActiveRecord 属性映射时,仍沿用旧的 Schema 快照——导致 TNI_NUMBER 被视为“不存在的属性”。
✅ 正确解决方案(临时且高效):
在控制器动作中、实例化模型前,手动刷新应用缓存:
public function actionCreate()
{
Yii::$app->cache->flush(); // ← 关键:强制清空全部缓存项(含 Schema 缓存)
$model = new YourModel();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('create', ['model' => $model]);
}⚠️ 重要注意事项:
php yii cache/flush-schema
(需确保 yii 控制台应用已正确配置缓存组件);
总结:新增字段后报“unknown property”,本质是 Schema 元信息滞后。flush() 是快速验证问题的黄金钥匙,而建立“迁移 → 刷新 Schema 缓存”的标准化流程,才是保障 Yii2 应用健壮性的工程实践。