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
只应进行验证。希望这对你/某人有帮助。