Laravel Dropzone问题与product_id一起上传

时间:2018-10-02 12:29:28

标签: php mysql laravel eloquent dropzone.js

假设我有一种产品,并且有很多图像。我使用了Dropzone js,如果我上传图像,那很好,但是如果要与product_id一起存储,则它传递null值。没有通过任何价值的工作罚款。所以我如何一次存储像图像名称和product_id呢? 这是我的控制器:

 public function store(Request $request)
    {
        if ($request->hasFile('file')){

            $file= $request->file;
            $fileName = $file->getClientOriginalName();
            $fileName =  time() .'-'.$fileName;
            $productImage = public_path("uploads/products/{$fileName}"); // get previous image from folder
            if (File::exists($productImage)) { // unlink or remove previous image from folder
                unlink($productImage);
            }
            $file->move('public/uploads/products/',$fileName);
            $image  = new Image();
            $image->image = $fileName;
            $image->product_id = $request->product_id;
            $image->save();

//            return redirect()->route('product.index');

        }
}

数据库架构:

 Schema::create('images', function (Blueprint $table) {
            $table->increments('id');
            $table->string('image');
            $table->integer('product_id')->unsigned()->nullable();
            $table->foreign('product_id')->references('id')->on('products')->onUpdate('cascade')->onDelete('cascade');
            $table->timestamps();
        });

错误:

  

消息:“ SQLSTATE [23000]:违反完整性约束:1452无法   添加或更新子行:外键约束失败   ({eshopimages,约束images_product_id_foreign外键   (product_id)参考文献productsid)开启级联删除   UPDATE CASCADE)(SQL:插入imagesimageproduct_id,   updated_atcreated_at)值(1538483231-blog-1-3.png,123,   2018-10-02 12:27:11,2018-10-02 12:27:11))“

4 个答案:

答案 0 :(得分:0)

如果某些列是另一个表中的外键,则无法更新表。

如果要更新,请首先删除外键具有的表(images)。您可以更新此products表之后。

答案 1 :(得分:0)

我认为可能与您的问题有关的3个原因:

1:很冷,您需要使模型中的列可填充。

2:因为您将其作为外键,所以必须自动设置ID,而不能插入(从原点获取)或取消绑定值。

3:这意味着u插入的值在原始表中不存在,因为u出现此错误。

祝你好运

答案 2 :(得分:0)

  

在@blade中使用

<input type="hidden" name="product_id" class="form-control m-input" value="{{$id}}">

状态

<input type="hidden" name="product_id" class="form-control m-input" value="123">

答案 3 :(得分:0)

Mysql给出“无法添加或更新子行:外键约束失败”,因为在product表中没有123 id的产品。首先,您需要创建该产品。之后,您可以为其创建关系记录