Laravel 使用 product_id 上传的拖放区问题
Laravel dropzone problem for upload with product_id
假设我有一个产品,它有很多图片。我使用了 Dropzone js,如果我上传图片那么它很好但是如果想用 product_id 存储然后它传递空值。没有传递任何价值它的工作正常。那么我怎样才能同时存储图像名称和 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();
});
错误:
message: "SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot
add or update a child row: a foreign key constraint fails
(eshop
.images
, CONSTRAINT images_product_id_foreign
FOREIGN KEY
(product_id
) REFERENCES products
(id
) ON DELETE CASCADE ON
UPDATE CASCADE) (SQL: insert into images
(image
, product_id
,
updated_at
, created_at
) values (1538483231-blog-1-3.png, 123,
2018-10-02 12:27:11, 2018-10-02 12:27:11))"
如果某些列是另一个 table 中的外键,则无法更新 table。
如果你想更新,如果首先删除外键 (images)
的 table。之后可以更新这个products
table.
我能想到 3 个可能 link 解决您的问题的原因:
1: 很冷,你需要让模型中的列可填充。
2:因为你把它作为 foreign_key 你必须自动设置 id 而不是插入(从原点获取)或解除绑定值。
3: 这意味着你插入的值在原点上不存在 table 因为你得到这个错误。
祝你好运
in @blade use
<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">
Mysql 给出“无法添加或更新子行:外键约束失败”,因为您在 123 id 的产品 table 中没有任何产品。首先,您需要创建该产品。之后你可以为它创建关系记录
假设我有一个产品,它有很多图片。我使用了 Dropzone js,如果我上传图片那么它很好但是如果想用 product_id 存储然后它传递空值。没有传递任何价值它的工作正常。那么我怎样才能同时存储图像名称和 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();
});
错误:
message: "SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
eshop
.images
, CONSTRAINTimages_product_id_foreign
FOREIGN KEY (product_id
) REFERENCESproducts
(id
) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert intoimages
(image
,product_id
,updated_at
,created_at
) values (1538483231-blog-1-3.png, 123, 2018-10-02 12:27:11, 2018-10-02 12:27:11))"
如果某些列是另一个 table 中的外键,则无法更新 table。
如果你想更新,如果首先删除外键 (images)
的 table。之后可以更新这个products
table.
我能想到 3 个可能 link 解决您的问题的原因:
1: 很冷,你需要让模型中的列可填充。
2:因为你把它作为 foreign_key 你必须自动设置 id 而不是插入(从原点获取)或解除绑定值。
3: 这意味着你插入的值在原点上不存在 table 因为你得到这个错误。
祝你好运
in @blade use
<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">
Mysql 给出“无法添加或更新子行:外键约束失败”,因为您在 123 id 的产品 table 中没有任何产品。首先,您需要创建该产品。之后你可以为它创建关系记录