我正在使用unclead / yii2-multiple-input小部件。
我想使用数据库中的值生成不同数量的行。 我该怎么办?
我可以在视图中设计列,并在页面生成后手动编辑数据。但是错过了如何在视图中编程行数及其值。
查看我的代码:
<?= $form->field($User, 'User')->widget(MultipleInput::className(), [
'min' => 0,
'max' => 4,
'columns' => [
[
'name' => 'name',
'title' => 'Name',
'type' => 'textInput',
'options' => [
'onchange' => $onchange,
],
],
[
'name' => 'birth',
'type' => \kartik\date\DatePicker::className(),
'title' => 'Birth',
'value' => function($data) {
return $data['day'];
},
'options' => [
'pluginOptions' => [
'format' => 'dd.mm.yyyy',
'todayHighlight' => true
]
]
],
]
])->label(false);
我如何制作(例如)8个具有不同值的行,并且还能够编辑/删除/更新其中的某些行?
答案 0 :(得分:2)
您需要查看文档,因为它说您需要在模型中分配一个单独的字段,该字段将以JSON格式存储所有计划,然后在编辑/更新模型时将其提供回该字段。 / p>
您尚未添加适当的模型来验证在上述给定情况下如何创建字段User
。因此,我将尝试创建一个简单的示例,以帮助您在场景中实现它。
例如。
您必须将用户以及他最喜欢的书存储在数据库中。
User
id, name, email
Books
id, name
User
表中使用文本类型的名称schedule
创建一个字段/列,您可以编写迁移或手动添加。将其添加为User
的{{1}}模型中的规则。
如下所示
safe
将窗口小部件添加到public function rules() {
return [
....//other rules
[ [ 'schedule'] , 'safe' ]
];
}
请参见下面的代码
ActiveForm
保存echo $form->field($model,'schedule')->widget(MultipleInput::class,[
'max' => 4,
'columns' => [
[
'name' => 'book_id',
'type' => 'dropDownList',
'title' => 'Book',
'items' => ArrayHelper::map( Books::find()->asArray()->all (),'id','name'),
],
]
]);
模型时,将数组转换为JSON字符串。
如下所示
User
在加载表单之前,重写if( Yii::$app->request->isPost && $model->load(Yii::$app->request->post()) ){
$model->schedule = \yii\helpers\Json::encode($model->schedule);
$model->save();
}
模型的afterFind()
以将json隐匿到数组中。
如下所示
User
现在,当针对当前用户保存public function afterFind() {
parent::afterFind();
$this->schedule = \yii\helpers\Json::decode($this->schedule);
}
字段时,书籍的选定行将具有JSON,与所选择的行一样,例如,如果我保存了三本ID为(1,2,3)的书籍那么它将具有如下的json
schedule
上面的JSON将被转换为{
"0": {
"book_id": "1"
},
"2": {
"book_id": "2"
},
"3": {
"book_id": "3"
}
}
中的数组,这样,当您编辑记录时,小部件将加载保存的计划。
现在转到更新页面或编辑新保存的模型,您将看到自动加载的图书。