Laravel 8 中多张图片上传的问题

时间:2021-01-03 18:57:29

标签: php mysql laravel

我必须制作一个在线商店网站,并且必须在我的产品表单中上传多张图片,然后在我的视图中将其显示为幻灯片。我尝试了 5 个教程或它们的概念,但没有任何效果。我很沮丧,所以如果你们知道任何事情,请联系我。我希望找到最简单直接的方法将图像存储在数据库中并显示它们。我不擅长后端,但我正在努力学习。

如果你想知道我到目前为止所做的工作是我有两张连接起来的桌子,它们是图像和食物。然后,图像表有一个外键,可以从食物表中获取 id。这将有助于系统知道哪个图像指的是哪种食物。根据我迄今为止尝试过的教程和我尝试过的最好的教程,我将其上传到数据库中,但文件名仅显示 []。我也检查了我的公共文件夹,但找不到我上传的文件。我试图在视图中显示它,但它抛出了一个混乱的错误。因为这个功能,我真的很困惑和压力。

这是来自我的控制器的代码(getwelcome 是我的索引):

public function getWelcome(Food $foods)
    {
        $data = Images::all();
        return view('welcome', compact('foods', 'data'));
    }

public function store(Request $request)
{

    $foods = new Food([
        'name'            =>  $request->get('name'),
        'description'     =>  $request->get('description'),
        'price'           =>  $request->get('price'),
        // column name => front-end name
    ]);
    $foods->save();

    
    if ($request->hasfile('filename')) {
        foreach ($request->file('filename') as $image) {
            $name = $image->getClientOriginalName();
            $image->move(public_path() . '/images/', $name); // folder path
            $data[] = $name;
        }
    }
    
    $Upload_model = new Images;
    $Upload_model->food_id = $foods->id;
    $Upload_model->filename = json_encode($data);
    $Upload_model->save();


    session()->flash('success', 'Food successfully added.');
    return redirect()->route('welcome');
}

图片迁移

Schema::create('images', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('food_id');
            $table->String('filename');
            $table->timestamps();

            $table->foreign('food_id')
               ->references('id')
               ->on('food')
               ->onDelete('cascade');
});

在我看来

@foreach($data as $image)
 @foreach(json_encode($image->filename)as $picture) 
    <div class="mySlides fade">
      <img src="{{ asset('/images'.$picture) }}" style="width:295px; height:295px">
    </div>
 @endforeach
@endforeach

2 个答案:

答案 0 :(得分:0)

您的错误是在您的视图中调用了 json_encode。该字段已经是一个字符串,您需要将其从 JSON 中“解码”为 PHP 可以使用的内容:

@foreach (json_decode($image->filename) as $image)

    ...{{ asset('images/'. $image) }}...

答案 1 :(得分:-1)

if ($files = $request->file('images')) :
        foreach ($files as $file) :
            $extension = $file->extension();
            $imageName = time() . rand(1, 100) . '.' . $extension;
            $file->storeAs('/public/image/product/multiple', $imageName);
            $arr[] = $imageName;
        endforeach;
        $image = implode(",", $arr);
        $product->m_image = $image;
    else :
        $image = '';
    endif;