如何在 Yii2 中将带有 kartik-Select2 小部件项目的选择保存到 DB?

Posted

技术标签:

【中文标题】如何在 Yii2 中将带有 kartik-Select2 小部件项目的选择保存到 DB?【英文标题】:How to save selected with kartik-Select2 widget items to DB in Yii2? 【发布时间】:2016-06-11 13:13:18 【问题描述】:

我的问题如下。 我正在尝试将多个项目插入到 mysql 数据库表中。我使用 Kartik-Select2 小部件进行项目选择。 以下代码对我有用,我可以用它选择多个项目。

 <?= $form->field($model, 'categories')->widget(Select2::className(), [
    'data' => $model->availableCategories(),
    'model' => $model,
    'attribute' => 'categories',
    'language' => 'en',
    'options' => ['placeholder' => 'Select a site...'],
    'pluginOptions' => [
        'allowClear' => true,
        'multiple' => true,
        ],
    ]) ?>

但是现在如何将选定的项目保存到数据库表中。选定的项目存储在哪里(小部件内是否有一些数组)? 我在 Model 类中定义的“类别”属性为:

public $categories = [];

我认为选定的项目会填充到它。但它不起作用(表单提交后数组为空)。我阅读了许多类似的主题,但没有找到完整和完整的解释它是如何工作的。我是 Yii2 的新手,可能迷路了。感谢您的帮助。

【问题讨论】:

显示你的动作(控制器) 【参考方案1】:

通常以这种方式保存多选项目(这是一种简化的方式)

  public function actionYourAction()
  
      $post = Yii::$app->request->post();

      if (!empty($post))

          $postModel = $post['YourModel'];
          $postModelMulti=  $postModel['your_multi_attribute'];

          if ( !empty( $postModelMulti) )
              foreach ($postModelMulti as $key => $value) 

                  $newModel  = new YuorModelToAdd();

                  $newModel->your_attribute = $value;

                  $newModel->save();
              
            
       
      ......

【讨论】:

嗨。谢谢你的答案。它帮助我找到了答案。 这对我也有帮助。

以上是关于如何在 Yii2 中将带有 kartik-Select2 小部件项目的选择保存到 DB?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 yii2 中将应用资产编译为模块资产?

如何在 Yii2 中将接口注入控制器的构造函数

如何在yii2中将JSON返回给ajax [重复]

如何在yii2 restful api中将两个表中的关系数据显示为json格式

如何在 Yii2 mpdf 中将 <br> 标签实际呈现为换行符

如何在 YII2 Advanced 中将 Employee 表中的数据添加到用户表中