2016-08-08 9 views
0

Мне нужно организовать раскрывающийся список мультиселектов. Я пытался так:Как организовать выпадающий список multiselect с помощью расширения kartik-select2

<?= $form->field($model, 'receiver_id')->widget(Select2::classname(), 
    [ 'data' => ArrayHelper::map(User::find()->all(),'id','username'), 
     'options' => 
      ['placeholder' => 'Select receivers...', 'multiple' => true], 
     'pluginOptions' => 
      [ 'tags' => true, 
       'maximumInputLength' => 10 
      ], 
    ]); 
?> 

В представлении это кажется правильно, в текстовом поле Приемники появляются один за другим, но когда я нажимаю кнопку «Отправить», он говорит, что приемник ID должен быть целым. Как я могу решить эту проблему? Мне нужно дублировать одну запись db для разных приемников, которые я выбираю, используя выпадающий список select2. Например, я выбираю в раскрывающемся списке user1 и user2, действие «Отправить» должно работать дважды. В таблице db, названной как «письмо», должны быть две одинаковые записи с разными идентификаторами id и receiver_id.

Моя функция actionCreate в классе контроллера:

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

    if ($model->load(Yii::$app->request->post())) { 

     foreach($model->receiver_id as $r_id){ 
      $save = new Letter(); 
      $save->type_id = $model->type_id; 
      $save->subject = $model->subject; 
      $save->body = $model->body; 
      $save->sender_id = $model->sender_id; 
      $save->start_date = $model->start_date; 
      $save->end_date = $model->end_date; 
      $save->receiver_id = $r_id; 
      $save->save(); 
     } 
     $model->attachment = UploadedFile::getInstance($model, 'attachment'); 
     $filename = pathinfo($model->attachment , PATHINFO_FILENAME); 
     $ext = pathinfo($model->attachment , PATHINFO_EXTENSION); 

     $newFname = $filename.'.'.$ext; 

     $path=Yii::getAlias('@webroot').'/uploads/'; 
     if(!empty($newFname)){ 
      $model->attachment->saveAs($path.$newFname); 
      $model->attachment = $newFname; 
      if($model->save()){ 
       return $this->redirect(['view', 'id' => $model->id]); 
      } 
     } 
    } 
    return $this->render('create', [ 
     'model' => $model, 
    ]); 

} 

Мой IDE говорит на "$ модели-> receiver_id", что "Ожидаемые типы массива или объекта, фактический: ИНТ"

Спасибо заранее.

+0

Я думаю, вам нужно изменить правило атрибута 'receiver_id'. –

+0

Какое правило вы имеете в виду? –

ответ

-1

do array_id как массив на вашей модели; и

foreach($model->receiver_id as $r_id){ 
    $save = new YourModel(); 
    $save->yourProperty = $model->yourProperty; 
    .... 
    $save->receiver_id = $r_id; 
    $save->save(); 
} 
+0

Нужно ли добавить этот цикл в метод actionCreate? –

+0

Yeap on actionCreate – rakhmatov

+0

Не могли бы вы указать, как это сделать: «do receiver_id как массив на вашей модели»? –

 Смежные вопросы

  • Нет связанных вопросов^_^