【问题标题】:store uploaded images into database laravel 8将上传的图像存储到数据库 laravel 8
【发布时间】: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


【解决方案1】:

你可以像下面这样思考

$images=[]; 
    
    foreach($request->file('images') as $file){
        
        $fileName = time().Str::random(8).'.'.$file->getClientOriginalExtension(); 
        $file->store('public/images/'.$fileName);
        $images[]=['file_path'=>$fileName] ;
            
    } 
    
    $product->images()->createMany($images);

希望你们在产品型号上有很多关系

【讨论】:

  • 是的,我已经设置了关系并且工作正常,你没有指定我应该在哪个函数中添加这个?
  • 你可以在 $product->stocks()->create([ 'quantity' => $request->stocks, 'product_id' => $product->id ]);这个
  • 我看不出这将如何让我获得“uploadFile”功能存储到公共文件夹中的图像
  • 你必须在数据库中只存储图像名称而不是文件
  • 是的,文件上传将在它自己的路由中,并且该路由调用'uploadFile'函数
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 2017-10-19
  • 2020-12-17
  • 2016-10-12
  • 1970-01-01
  • 2018-11-22
  • 2018-06-04
  • 1970-01-01
相关资源
最近更新 更多