Yii2 型号:loadMultiple不';t填充模型

Yii2 型号:loadMultiple不';t填充模型,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,我想一次创建多个记录 我有型号菜单,带有以下验证规则 public function rules() { return [ [['productID'], 'required'], [['userID', 'productID', 'portions'], 'integer'], [['userID'], 'safe'], ]; } 在控制器中,我有以下代码:

我想一次创建多个记录

我有型号菜单,带有以下验证规则

    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(); ?>
在视图创建中,我有以下代码:

    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(); ?>
数据来了,但是方法loadMultiple没有填充模型。
我不明白,为什么?

我忘了在表单中为productID字段添加hiddenInput,因此验证失败

    <?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 } ?>

您的答案可能会解决问题,但在某些情况下可能不是最佳方法。假设隐藏字段不应该是用户应该能够更改的内容,那么您可能不需要将其作为隐藏输入,相反,您应该将其从
规则中删除,并且
validateMultiple
将跳过它。或者,您也可以传递一组属性,这些属性
validateMultiple
只应进行验证。希望这对你/某人有帮助。