在yii中更改表后,数据无法保存

时间:2012-09-19 06:38:11

标签: php yii

我是yii框架中的新手。我在yii框架中创建一个应用程序。我用gii创建了模型,控制器和视图。之后我改变了数据库表。我删除了2列并添加了3个新列。之后用gii覆盖模型。但是,当我试图保存到该表时,它显示属性(这是我删除的旧列)未定义。 Plz为我提供了解决方案。

3 个答案:

答案 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.phppartial负责您的模型保存和更新操作。

您可以使用与模型相同的方法:(使用gii重新生成它)或者您可以手动编辑它(我建议您习惯这个,因为将来您将拥有您不想要的代码松散只是因为改变了一个列名。简单Find & edit在大多数文本编辑器中都可以完成这项任务。)

您可能需要阅读更多关于how MVC works in general & in Yii in special

的内容

答案 2 :(得分:0)

这是因为您正在使用架构缓存。您的表模式缓存在Yii中。您需要刷新AR缓存。刷新完整模式缓存或使用 Yii :: app() - > db-> schema-> getTable('tablename',true);在你的行动开始。这将更新模型架构缓存。