如何在Yii

时间:2016-05-05 06:17:00

标签: php yii2

我是Yii的新人。我需要创建产品模块来保存产品数据。我需要创建两个表productsproduct_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>

2 个答案:

答案 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对象,之后保存数据您希望如何,我希望您能够了解您现在需要做什么。希望它可以帮到你