假设我有一种产品,并且有很多图像。我使用了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无法 添加或更新子行:外键约束失败 ({
eshop
。images
,约束images_product_id_foreign
外键 (product_id
)参考文献products
(id
)开启级联删除 UPDATE CASCADE)(SQL:插入images
(image
,product_id
,updated_at
,created_at
)值(1538483231-blog-1-3.png,123, 2018-10-02 12:27:11,2018-10-02 12:27:11))“
答案 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的产品。首先,您需要创建该产品。之后,您可以为其创建关系记录