假设我有一个产品,它有许多图像。我使用了dropzone js,如果我上传了图片,那么就可以了,但是如果我想用产品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
)on delete cascade on update cascade)(sql:插入到 images
( image
, product_id
, updated_at
, created_at
)值(1538483231-blog-1-3.png,1232018-10-02 12:27:11,2018-10-02 12:27:11))”
4条答案
按热度按时间rxztt3cl1#
我能想到三个可能与你的问题有关的原因:
1:你可能需要在模型中填充柱。
2:因为您将它作为外键,所以必须自动设置id,而不是插入(从原点获取)或取消绑定该值。
3:这意味着u正在插入的值在原始表中不存在,因为u正在获取此错误。
祝你好运
ldioqlga2#
刀片使用中
分期付款
i2byvkas3#
如果某些列是另一个表中的外键,则不能更新该表。
如果要更新if,请首先删除包含外键的表
(images)
. 在你能更新这个之后products
table。cnwbcb6i4#
mysql给出“无法添加或更新子行:外键约束失败”,因为products表中没有123 id的产品。之后,您可以为它创建关系记录