Model::loadMultiple 没有填充模型
Model::loadMultiple doesn't fill models
我想一次创建多条记录。
我的模型 Menu 具有以下验证规则。
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,
]);
}
在视图 create 中,我有以下代码:
<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 方法没有填充模型。
我不明白,为什么?
我忘记在表单中添加 hiddenInput for 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 } ?>
我想一次创建多条记录。
我的模型 Menu 具有以下验证规则。
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,
]);
}
在视图 create 中,我有以下代码:
<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 方法没有填充模型。 我不明白,为什么?
我忘记在表单中添加 hiddenInput for 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 } ?>