Yii2表单模型在数据库中保存空值

Yii2表单模型在数据库中保存空值,yii2,Yii2,因此,构建一个简单的表单,但当我尝试保存表单时,它不会保存值,而只保存NULL(当我将NULL更改为notnull时,它将给出一个错误) 此外,每次我保存它将添加一个新行,但我只需要1行,因为我保存在1行的值 db表 `id` int(11) NOT NULL, `modalactive` tinyint(4) DEFAULT NULL, `modaltimeout` bigint(20) DEFAULT NULL, `activeon` longtext DEFAULT NULL 控制器 p

因此,构建一个简单的表单,但当我尝试保存表单时,它不会保存值,而只保存NULL(当我将NULL更改为notnull时,它将给出一个错误)

此外,每次我保存它将添加一个新行,但我只需要1行,因为我保存在1行的值

db表

`id` int(11) NOT NULL,
`modalactive` tinyint(4) DEFAULT NULL,
`modaltimeout` bigint(20) DEFAULT NULL,
`activeon` longtext DEFAULT NULL
控制器

public function actionIndex()
{

    $model = new CmsSettings();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {

         return $this->render('index' , ['model' => $model]);

    }else{

        return $this->render('index' , ['model' => $model]);

    }

}
型号

class CmsSettings extends ActiveRecord
{
   public $id;
   public $modalactive;
   public $modaltimeout;
   public $activeon;

   public static function tableName()
   {
       return 'cms_settings';
   }

   public function rules(){
     return [
        [['modelactive'], 'required'],
        [['modalactive', 'modaltimeout'], 'integer']
     ];
   }
}
查看

$form = ActiveForm::begin([
    'action'  => yii\helpers\Url::to(['cms-settings/index']),      
]);


echo $form->field($model, 'modalactive');
echo $form->field($model, 'modaltimeout');
echo $form->field($model, 'activeon');

echo Html::submitButton(Yii::t('cms', 'save'));

ActiveForm::end();
删除此项:

   public $id               = 1;
   public $modalactive      = 1;
   public $modaltimeout     = 20000;
   public $activeon;
从你的模型

然后,将字段
activeon
添加到
rules()
方法中。
rules()
方法中不存在的字段是不安全的,不会被处理。为了测试目的,在那里添加
['activeon','save']
,如果可以的话-将其更改为正确的验证

就这些。ActiveRecord会自动映射表中的列。如果你覆盖它-它将不会得到正确处理。要设置默认值,应使用
default
validator-


关于多次保存-在使用
$model->load()
之前,必须先加载模型。现在,每次保存时都会创建新模型。

您需要删除以下属性:

public $id               = 1;
public $modalactive = 1;
public $modaltimeout     = 20000;
public $activeon;

这些将从数据库结构中获取,并通过
\uuu get()
\uu set()
魔术方法作为虚拟属性提供。

规则中使用了错误的属性名称


请将
CmsSettings
模型中的
rules
方法中的属性
modelactive
更改为
modalactive
,并删除顶部模型中定义的属性。

没有,我已经尝试过,仍然保存空als值。感谢您对默认设置的建议。很可能您正在谈论的是
activeon
字段。将其添加到规则中,将根本不处理
rules()
方法中不存在的字段。答案更新我看到您使用从模型中的属性中删除的值编辑了答案,但您必须完全删除它。你不能像那样声明属性。仍然不起作用,所有字段都保存为空,当我用save添加规则时,它会将页面重定向到错误(ERR_EMPTY_RESPONSE)好的,当我添加字符串(而不是save)时,它会起作用,但我如何更新行而不是每次创建新行?