首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用textInput保存mysql中自动生成的多个Yii2数组值

如何使用textInput保存mysql中自动生成的多个Yii2数组值
EN

Stack Overflow用户
提问于 2015-10-29 07:20:52
回答 3查看 1.1K关注 0票数 3

你好,我希望使用MySQL将多个表单字段值保存到Yii2数据库表中,而无需编写任何自定义查询代码。我的表结构是id主键auto_incremented的位置。我的数组结构如下所示

表单字段是

代码语言:javascript
复制
   <tr>
              <td>1</td>
              <td><?= $form->field($coordinatemodel,'lat_degree[]')->textInput(['placeholder'=>'Degree','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Degree')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'lat_min[]')->textInput(['placeholder'=>'Minute','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Minute')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'lat_second[]')->textInput(['placeholder'=>'Second','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Second')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_degree[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Degree','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Degree')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_min[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Minute','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Minute')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_second[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Second','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Second')->label(false)?></td>
            </tr> 
            <tr>
              <td>2</td>
              <td><?= $form->field($coordinatemodel,'lat_degree[]')->textInput(['placeholder'=>'Degree','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Degree')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'lat_min[]')->textInput(['placeholder'=>'Minute','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Minute')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'lat_second[]')->textInput(['placeholder'=>'Second','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Second')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_degree[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Degree','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Degree')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_min[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Minute','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Minute')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_second[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Second','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Second')->label(false)?></td>
            </tr> 
            <tr>
              <td>3</td>
              <td><?= $form->field($coordinatemodel,'lat_degree[]')->textInput(['placeholder'=>'Degree','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Degree')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'lat_min[]')->textInput(['placeholder'=>'Minute','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Minute')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'lat_second[]')->textInput(['placeholder'=>'Second','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Second')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_degree[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Degree','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Degree')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_min[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Minute','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Minute')->label(false)?></td>
              <td><?= $form->field($coordinatemodel,'long_second[]')->textInput(['class'=>'form-control input-sm','placeholder'=>'Second','data-validation'=>'required number','data-validation-error-msg'=>'*Required','required'=>'required'])->label('Second')->label(false)?></td>
            </tr> 

id lat_degree lat_min lat_second long_degree long_min long_second
1  50         50      50          55          55       55
2  60         60      60          65          65       65
3  65         65      65          70          70       70

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-29 08:39:45

表格输入的文档对此有一个解释。您可以修改您的actionCreate以包括此内容。

首先,需要先填充创建一个模型数组才能填充:

代码语言:javascript
复制
$count = count(Yii::$app->request->post('CoordinateDetails', []));
$coordinateDetails = [new CoordinateDetail()];
for ($i = 1; $i < $count; $i++) {
    $coordinateDetails[] = new CoordinateDetail();
}

然后,您可以使用loadMultiplevalidateMultiple来填充和验证模型。但是,为了保存模型,您必须遍历模型:

代码语言:javascript
复制
if (CoordinateDetail::loadMultiple($coordinateDetails, Yii::$app->request->post()) 
    && CoordinateDetail::validateMultiple($coordinateDetails)) {
    foreach ($coordinateDetails as $coordinateDetail) {
        //do any other thing here e.g. setting foreign keys
        $coordinateDetail->save(false);
    }
    return $this->redirect('index');
}
else {
    // do something for the error
}
票数 3
EN

Stack Overflow用户

发布于 2015-10-29 07:28:20

我认为您应该使用batchInsert方法:

代码语言:javascript
复制
        \Yii::$app->db->createCommand()->batchInsert('yourtable', ['lat_degree','lat_min','lat_second',...],$CoordinatesDetail )
        ->bindValue(':id', 1)
        ->execute();
票数 0
EN

Stack Overflow用户

发布于 2015-10-30 10:46:05

当我在我的项目中有这样的场景时,我使用yii2 2-动态形式扩展,它声明:

它是yii2框架的小部件,可以以嵌套的方式克隆表单元素,从而保持可访问性。

检查它是演示这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33408112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档