Yii2 вставить данные из CheckBoxList - PullRequest
0 голосов
/ 17 марта 2019

В моей форме:

 <?= GridView::widget([
 'id' => 'griditems',
 'dataProvider' => $dataProvider,
  'columns' => [
   'receiver_name',
   'receiver_phone',
   'item_price',
   'shipment_price',
   ['class' => 'yii\grid\CheckboxColumn'],
  ],

]); ?>

В моем контроллере:

public function actionCreate()
{
    $model = new Package();
    $searchModel = new ShipmentSearch();
    $searchModel->shipment_position=1; // الشحنه في مقر الشركة
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    if ($model->loadAll(Yii::$app->request->post())){ 
        $select = Yii::$app->request->post('selection');

        foreach($select as $id){
            $shipment= shipment::findOne((int)$id);
            $model->company_id=1;
            $model->shipment_id=$shipment->id;
            $model->send_from=$shipment->send_from;
            $model->send_to=$shipment->send_to;
            $model->save(false);

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

Я просто пытаюсь вставить данные, как указано выше, но данные вставляются только последними или последнимиCheckBox из списка.Я попытался напечатать id, что в foreach, и существует более одного идентификатора.

1 Ответ

1 голос
/ 17 марта 2019

Это потому, что вы повторно используете один и тот же набор для каждого save() внутри foreach, поэтому вы перезаписываете одну и ту же модель снова и снова.Вам нужно поместить $model = new Package() внутри foreach:

foreach($select as $id){
    $shipment= shipment::findOne((int)$id);
    $model = new Package();
    $model->company_id=1;
    $model->shipment_id=$shipment->id;
    $model->send_from=$shipment->send_from;
    $model->send_to=$shipment->send_to;
    $model->save(false);
}
...