0

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

4

3 回答 3

1

您需要rules()在模型的验证方法中定义所有列,查看并确保您已经为表中的每一列定义了规则,例如(如果它是一个最大长度为 128 的字符串):

public function rules()
{
    return array(
        ...
        array('myField', 'length', 'max'=>128),
        ...
    );
}

查看有关验证规则的一些信息。

此外,对于表单,如果您使用 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);
    ...
}

确保您拥有所有这些元素,并且您不应该收到“* is not defined”错误。

此外,如果您在主配置文件中使用模式缓存,则必须在应用程序看到您的新数据库结构之前清除缓存。

于 2012-09-19T07:14:31.827 回答
0

您的更改也应该在视图中设置,因为有使用旧属性的表单、小部件!(对于这个确切的保存问题,您需要修复模型保存和更新操作_form.php部分责任。

您可以像对模型所做的那样做同样的事情:(使用 gii 重新生成它)或者您可以手动编辑它(我建议您习惯这一点,因为将来您将拥有不想丢失的代码,因为更改列名。Find & edit在大多数文本编辑器中都很简单)。

可能您需要阅读更多关于MVC 的一般工作原理和 Yii 的特殊工作原理

于 2012-09-19T07:17:40.923 回答
0

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

于 2017-07-26T07:22:56.017 回答