Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Yii中插入多个表中的数据_Php_Yii2 - Fatal编程技术网

Php 如何在Yii中插入多个表中的数据

Php 如何在Yii中插入多个表中的数据,php,yii2,Php,Yii2,我是新来的。我需要创建产品模块来保存产品数据。因此,我需要创建两个表products和product\u image,以保存产品数据和多个产品图像 产品表 标识、类别、标识、标题、价格、说明 产品形象表 标识、产品标识、图像 我已经如上所述创建了表,并为产品表生成了模型和CRUD。但当我要添加产品页面时,我并没有看到图片上传按钮在添加产品页面中,我只得到了product表字段。 我应该为两个表创建模型以获取图像上载按钮吗? 如何在yii中的多个表中插入数据 提前谢谢 更新 ProductCont

我是新来的。我需要创建产品模块来保存产品数据。因此,我需要创建两个表
products
product\u 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,
            ]);
        }
    }
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]);
    }
}
My Add product 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>

//这里我得到了未定义变量$productsImage的错误

Yii2提供了一种处理这种情况的方法:

在您的产品控制器中:

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,
            ]);
        }
    }
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]);
    }
}

Yii2提供了一种处理这种情况的方法:

在您的产品控制器中:

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,
            ]);
        }
    }
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)您可以在产品模型中为image button创建公共变量。假设您在产品模型中创建了公共变量,如
public$productImage
,并且在中的视图文件中,您可以使用此代码为图像创建上载按钮

`echo $form->fileField($model,'productImage',array('class' => 'btn'));`
2) 第二个选项,若要创建productImage模型,则需要从product的创建操作传递该对象。假设在产品控制器的创建操作中,您可以创建productImages模型的对象,如下所示

$productImages = new productImages;
您需要像这样在create视图中传递这个模型变量

 $this->render('create',array(
                'model'=>$model,
                'productImages'=> $productImages,

                ));
这里假设$model是您的产品模型对象。在视图文件中,您可以创建如下代码所示的图像按钮

echo $form->fileField($productImages,'product_image',array('class' => 'btn'));

这里的“product_image”是product_image表的列名。在控制器创建操作中,您将使用product_images post进入post对象,然后以您想要的方式保存数据。我希望您知道现在需要做什么。希望它能帮助您

在您的产品表中没有图像字段,因此您无法获得上载图像按钮。这里有很多方法可以做到这一点。1)您可以在产品模型中为image button创建公共变量。假设您在产品模型中创建了公共变量,如
public$productImage
,并且在中的视图文件中,您可以使用此代码为图像创建上载按钮

`echo $form->fileField($model,'productImage',array('class' => 'btn'));`
2) 第二个选项,若要创建productImage模型,则需要从product的创建操作传递该对象。假设在产品控制器的创建操作中,您可以创建productImages模型的对象,如下所示

$productImages = new productImages;
您需要像这样在create视图中传递这个模型变量

 $this->render('create',array(
                'model'=>$model,
                'productImages'=> $productImages,

                ));
这里假设$model是您的产品模型对象。在视图文件中,您可以创建如下代码所示的图像按钮

echo $form->fileField($productImages,'product_image',array('class' => 'btn'));

这里的“product_image”是product_image表的列名。在控制器创建操作中,您将使用product_images post进入post对象,然后以您想要的方式保存数据。我希望您知道现在需要做什么。希望对您有所帮助

谢谢。但在添加产品页面中,我没有获得上载图像选项(文件上载选项)。@DeepParekh请通过提供代码编辑您的问题,以便更容易调试…谢谢。但在添加产品页面中,我没有获得上载图像选项(文件上载选项)。@DeepParekh请通过提供代码编辑您的问题,以便更易于调试…谢谢让我检查并实现。您好@dinesh我使用了您的代码,但我遇到错误“未定义变量:productsImage”在view/_form.phpsee中,我更新了我的问题并共享了控制器代码@DeepParekh我发现了问题您是否在create.php中传递了$productsImage变量,该变量位于产品视图文件夹中如果没有,请传递看起来像是感谢让我检查并实现。Hi@dinesh我使用了您的代码,但我发现错误“未定义变量:productsImage”在view/_form.phpsee中,我更新了我的问题并共享了控制器代码@DeepParekh我发现了一些问题,您是否在create.php中传递了$productsImage变量,该变量位于产品的视图文件夹中?如果没有,请按如下方式传递