Model :: loadMultiple не заполняет модели - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу создать несколько записей одновременно.

У меня есть модель Меню со следующими правилами проверки.

    public function rules()
    {
        return [
            [['productID'], 'required'],
            [['userID', 'productID', 'portions'], 'integer'],
            [['userID'], 'safe'],
        ];
    }

В контроллере у меня есть следующий код:

    public function actionCreate(){

    $products = Product::find()->where(['status'=>Product::STATUS_ACTIVE])->all();
    $models = [];
    foreach($products as $product){
        $models[] = new Menu;
    }


    if (Model::loadMultiple($models, Yii::$app->request->post()) && Model::validateMultiple($models)) {
        foreach( $models as $model ){
            $model->save(false);
        }
        $this->redirect('/site');
    }

    foreach($products as $index => $product){
        $models[$index]->productID = $product->id;
    }

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

В представлении создать У меня есть следующий код:

<div>
<?php $form = ActiveForm::begin(); ?>

<?php foreach($models as $index =>  $model) { ?>

    <?= $form->field($model, "[$index]portions")->label($model->product->name) ?>

<?php } ?>

<div>
    <?= Html::submitButton(Yii::t('app','Save'),['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>

var_dump (Yii :: $ app-> request-> post ()) дает мне следующее разрешение.

array(2) { ["_csrf-frontend"]=> string(88) "D-vbF_6B7YWBFlH1JTTWEOTeQb0esZhSRN7Bti0S-QdDm-0jj7Wd3dBUGqZBW5J2nrAq-VbfoAQIkpGDXCOtMg==" ["Menu"]=> array(2) { [0]=> array(1) { ["portions"]=> string(4) "9999" } [1]=> array(1) { ["portions"]=> string(4) "5555" } } }

Данные поступают, но метод loadMultiple не заполняет модели. Я не понимаю, почему?

1 Ответ

0 голосов
/ 27 апреля 2018

Я забыл добавить hiddenInput для productID в форме, проверка не удалась из-за этого.

    <?php foreach($models as $index => $model) { ?>
        <?= $form->field($model, "[$index]portions")->label($model->product->name) ?>
        <?= $form->field($model, "[$index]productID")->hiddenInput(['value' => $model->productID])->label(false);?>    
    <?php } ?>
...