【发布时间】:2021-08-28 13:10:45
【问题描述】:
我有一个产品,我希望它有多个文件,所以我在产品和图像模型之间建立了 oneToMany 关系。 我能够成功上传图片
public function uploadFile(Request $request)
{
if($request->hasFile('images'))
{
foreach($request->file('images') as $file)
$file->store('public/images/'. $file->getClientOriginalName());
}
return $request->file('images');
}
现在图像存储到存储/公共/〜我想将它们存储到数据库 这是我在 ProductController 中的商店功能
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'price' => 'required|numeric',
'description' => 'required',
'category' => 'required',
'attribute' => 'required',
'stocks' => 'required|numeric',
//'discounts' => 'required|numeric'
]);
$product = Product::create($request->only('name','price','description', 'tag', 'category', 'attribute'));
$product->stocks()->create([
'quantity' => $request->stocks,
'product_id' => $product->id
]);
$product->discounts()->create([
//'discount' => $request->discounts,
'product_id' => $product->id
]);
/*
foreach( $request->file('images') as $file)
{
$product->images()->create([
'product_id' => $product->id,
'file_path' => $file->hashName()
]);
}
*/
}
我应该添加什么以便能够将图像存储到表格中
更新
图像表架构
Schema::create('images', function (Blueprint $table) {
$table->id();
$table->string('file_path');
$table->timestamps();
$table->foreignId('product_id')->constrained('products')->onUpdata('cascade')->onDelete('cascade');
});
产品表架构
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->double('price');
$table->string('category');
$table->string('attribute');
$table->text('description');
$table->string('tag');
$table->timestamps();
});
【问题讨论】:
-
可以同时显示两个表架构
-
尝试在您的产品表中添加一个名为
image的列。你可以在那里存储文件的路径 -
@JohnLobo 我更新了架构,这样你就可以有更多的 unrestanting
-
@workservice 我认为这不是解决方案,因为我说我想要一个多文件上传,我能够将图像存储到存储文件夹中,我的问题是如何获取上传的图像并在产品商店功能中存储主题
-
好吧,你可以做的是改变与 belongsToMany 的关系,创建一个数据透视表。基本上,它所做的只是你将在产品表上上传的每个图像都会在数据透视表上创建一条记录。我还建议将它们存储在公用文件夹中,而不是存储中,除非它们是敏感数据。
标签: php laravel api file-upload