我是Yii的新人。我需要创建产品模块来保存产品数据。我需要创建两个表products
和product_image
来保存产品数据和多个产品图像。
产品表
id,category_id,title,price,description
产品图片表
id,product_id,image
我已经创建了上面的表,并为产品表生成了模型和CRUD。但是当我转到添加产品页面时,我没有得到图像上传按钮。 我在添加产品页面中只获得product
表格字段。
我应该为两张桌子创建模型以获取图片上传按钮吗?
如何在yii中的多个表中插入数据?
提前感谢。
更新
ProductController:
public function actionCreate()
{
$model = new Products();
$productsImage = new ProductsImage();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
'productsImage'=> $productsImage,
]);
}
}
我的添加产品form.php
<div class="products-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'category_id')->dropDownList(['0'=>'Select Parents Category']+
ArrayHelper::map(ProductCategory::find()->all(),'id','category_name')
) ?>
<?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'price')->textInput() ?>
<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>
<?= $form->field($productsImage,'image')->fileInput() ?> //here i am getting error of undefined variable $productsImage
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
答案 0 :(得分:1)
Yii2提供了一种处理这种情况的方法:
产品控制器中的:
public function actionCreate()
{
$product = new app\models\Product();
$productImages = new app\models\ProductImage();
if($product->load(Yii::$app->request->post()) && $productImages->load(Yii::$app->request->post()) && Model::validateMultiple([$product, $productImages])) {
// your other file processing code
$product->save();
$productImages->save();
// return/redirection statement
}else {
return $this->render(['create', 'product' => $product, 'productImages' => $productImages]);
}
}
答案 1 :(得分:1)
在您的产品表中没有图像字段,因此您没有获得上传图片按钮。这有很多方法可以做到这一点。 1)您可以在产品模型中为图像按钮创建公共变量。假设您已在// Add an annotation
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = userLocation.coordinate; // Change coordinate as yours
point.title = @"Where am I?";
point.subtitle = @"I'm here!!!";
[self.mapView addAnnotation:point];
等产品模型中创建公共变量,并且在视图文件中,您可以使用此代码为图像创建上传按钮。
public $productImage
2)第二个选项如果你想创建productImage模型,那么你需要从产品的create action传递该对象。假设在您的产品控制器的创建操作中,您可以创建如下的productImages模型对象。
`echo $form->fileField($model,'productImage',array('class' => 'btn'));`
你需要像这样在创建视图中传递这个模型变量
$productImages = new productImages;
这里假设$ model是您的产品模型对象。在视图文件中,您可以创建图像按钮,如下面的代码。
$this->render('create',array(
'model'=>$model,
'productImages'=> $productImages,
));
这里&#39; product_image&#39;是product_image表的列名。在控制器创建操作中,您将使用product_images帖子获取post对象,之后保存数据您希望如何,我希望您能够了解您现在需要做什么。希望它可以帮到你