所以构建一个简单的表单,但是当我尝试保存表单时,它不保存值但只保存NULL(当我将NULL更改为NOT NULL时会出错)。
每次我保存它都会添加一个新行,但我只需要1行即可将值保存在1行中。
db table
`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();
答案 0 :(得分:1)
删除它:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 'android-P'
defaultConfig {
applicationId "ru.scapegoats.myapplication"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
implementation 'com.google.android.material:material:1.0.0-alpha3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
}
来自你的模特。
之后,将字段 public $id = 1;
public $modalactive = 1;
public $modaltimeout = 20000;
public $activeon;
添加到您的activeon
方法中。 rules()
方法中不存在的字段不安全,并且不会被处理。添加rules()
用于测试目的,如果可行的话 - 将其更改为正确的验证。
这就是全部。 ActiveRecord会自动映射表中的列。如果你覆盖它 - 它将无法得到妥善处理。要设置默认值,您应使用['activeon', 'save']
验证程序 - Yii2 - Core Default Validator
关于多次保存 - 您必须在使用default
之前加载模型。现在,您每次保存时都会创建新模型。
答案 1 :(得分:0)
您需要删除这些属性:
$model->load()
这些将从数据库结构中获取,并通过public $id = 1;
public $modalactive = 1;
public $modaltimeout = 20000;
public $activeon;
和__get()
魔术方法作为虚拟属性提供。
答案 2 :(得分:0)
规则中使用的属性名称错误。
请在modelactive
模型中的modalactive
方法中将属性rules
更改为CmsSettings
,并删除顶部模型中定义的属性。