db yii2中的checkboxlist多项选择?

时间:2017-03-12 01:29:44

标签: php yii2

对我的问题了解很多,并没有弄清楚。我需要在checkboxList()的数据库中写两个或更多值 在我看来activeForm

<?= $form->field($model, 'quant[]')->checkboxList([
                        'one' => 'one',
                        'two' => 'two',
                        'three' => 'three',
                        'four' => 'four'], 
                        ['separator' => '<br>']); ?>

因此,无论我选择多少值,创建后,只有一个将添加db。 我意识到我需要在控制器中获取一个数组,然后它将保存在数据库中。像这样:

 public function actionCreate()
    {

        $model = new TakMol();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            $model->quant=implode(',',$_POST['TakMol']['quant']); //change items into string to be saved

            return $this->redirect(['index']);

        } else {
            $model->quant=explode(',',$model->quant); //string to array to fill the checkboxlist

            return $this->render('create', [
                'model' => $model,

            ]);
        }

    }

也许我需要在actionCreate

中做这样的事情
$post=Yii::$app->request->post();
        $checkbox = array_keys ($post);
        foreach ($checkbox as $value){
            $model = new TakMol();              
                     $model->quant = $model->id;  
                     $model->quant = $value;
                     $model->save();
        }

我尝试了其他选项,但没有成功。我将非常感谢帮助解决。

_form(cell) index(cell)

1 个答案:

答案 0 :(得分:0)

如果您使用表单模型作为基本模型的额外字段的支持,则可以在此新类中处理此任务。

将TakMolForm.php文件放在TakMol.php的同一文件夹中:

class TakMolForm extends TakMol
{
      private $_quantArray;

      public function getQuantArray()
      {
           // Initialize it from 'quant' attribute
           if($this->_quantArray == null) 
           {
                 $this->_quantArray = explode(',', $this->quant);
           }
           return $this->_quantArray;
      }

      public function setQuantArray($value)
      {
           $this->_quantArray = $value;
      }


      public function rules()
      {
          return array_merge(parent::rules(), [
                   [['quantArray'], 'safe'],

          ]);
       }       
}

然后在控制器中改变TakMolForm中的TakMol:

public function saveModel($model)
{
    // Here is called getQuantArray() getter from TakMolForm model
    $model->quant = implode(',', $model->quantArray);

    return $model->save();    
}

public function actionCreate()
{
    $model = new TakMolForm();

    if ($model->load(Yii::$app->request->post()) && $this->saveModel($model)) {
        return $this->redirect(['index']);

    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }

 }

public function actionUpdate($id)
{
    $model = TakMolForm::findOne($id);

    if ($model->load(Yii::$app->request->post()) && $this->saveModel($model)) {
        return $this->redirect(['index']);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}

最后在视图中,您将使用quantArray字段而不是quant:

<?= $form->field($model, 'quantArray')->checkboxList([
                        'one' => 'one',
                        'two' => 'two',
                        'three' => 'three',
                        'four' => 'four'], 
                        ['separator' => '<br>']); ?>