Yii2表单模型在数据库中保存空值
因此,构建一个简单的表单,但当我尝试保存表单时,它不会保存值,而只保存NULL(当我将NULL更改为notnull时,它将给出一个错误) 此外,每次我保存它将添加一个新行,但我只需要1行,因为我保存在1行的值 db表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
`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)时,它会起作用,但我如何更新行而不是每次创建新行?