我是yii框架中的新手。我在yii框架中创建一个应用程序。我用gii创建了模型,控制器和视图。之后我改变了数据库表。我删除了2列并添加了3个新列。之后用gii覆盖模型。但是,当我试图保存到该表时,它显示属性(这是我删除的旧列)未定义。 Plz为我提供了解决方案。
答案 0 :(得分:1)
您需要在模型中的验证rules()
方法中定义所有列,查看并确保为表中的每个列定义了规则,例如(如果它是一个字符串,最大长度128):
public function rules()
{
return array(
...
array('myField', 'length', 'max'=>128),
...
);
}
查看有关validation rules的一些信息。
此外,对于表单,如果您正在使用CActiveForm小部件并调用如下字段:
echo $form->labelEx($model,'myField');
echo $form->textField($model,'myField');
然后,您需要确保在attributeLabels()
方法中也在模型中定义了标签,例如:
public function attributeLabels()
{
return array(
...
'myField'=>'My Field',
...
);
}
最后,如果您希望字段可搜索,则需要在模型中的search()
方法中添加语句,例如:
public function search()
{
...
$criteria->compare('myField',$this->myField);
...
}
确保您拥有所有这些元素,并且您不应该得到'*未定义'错误。
此外,如果您在主配置文件中使用架构缓存,则必须在应用程序看到新数据库结构之前清除缓存。
答案 1 :(得分:0)
您的更改也应设置在视图,因为有表格,widgets使用旧属性!! (对于这个确切的保存问题,您需要修复_form.php
,partial负责您的模型保存和更新操作。
您可以使用与模型相同的方法:(使用gii重新生成它)或者您可以手动编辑它(我建议您习惯这个,因为将来您将拥有您不想要的代码松散只是因为改变了一个列名。简单Find & edit
在大多数文本编辑器中都可以完成这项任务。)
您可能需要阅读更多关于how MVC works in general & in Yii in special
的内容答案 2 :(得分:0)
这是因为您正在使用架构缓存。您的表模式缓存在Yii中。您需要刷新AR缓存。刷新完整模式缓存或使用 Yii :: app() - > db-> schema-> getTable('tablename',true);在你的行动开始。这将更新模型架构缓存。