如何显示在laravel中存储为数组的多个图像?

时间:2018-10-25 07:15:11

标签: laravel

请帮助我显示以数组形式存储在数据库中的图像 我的控制器: (文件名是我在数据库中的图像列名称)

公共功能存储(请求$ request) {

$this->validate($request, [

        'filename' => 'required',
        'filename.*' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048'

]);

// Start multiple image upload code 
if($request->hasfile('filename'))
 {

    foreach($request->file('filename') as $image)
    {
        $name=$image->getClientOriginalName();
        $image->move(public_path().'/images/', $name);  
        $data[] = $name;  
    }
 }
// End multiple image upload code


$houses= new House();
$houses->division = $request->input('division');
$houses->city = $request->input('city');
$houses->area = $request->input('area');
$houses->owner_name = $request->input('owner_name');
$houses->house_name = $request->input('house_name');
$houses->type = $request->input('type');
$houses->from = $request->input('from');
$houses->rent = $request->input('rent');
$houses->phone = $request->input('phone');
$houses->address = $request->input('address');
$houses->description = $request->input('description');

$houses->filename=json_encode($data); **// This for  image upload**

$houses->save();

return back()->with('success', 'Your House has been successfully');

}

image column

2 个答案:

答案 0 :(得分:0)

如果要检索,则显示存储为数组的图像,我建议将文件名属性转换为模型中的json / array。

您可以在House模型中执行以下操作:

class House extends Model
{
    protected $casts = [
        'filename' => 'array',
    ];
}

要在视图中显示它,可以遍历转换数组:

@foreach($house->filename as $image)
    <img src="{{ url('link/to/assets/') . $image }}"
@endforeach

在文档中查看有关投射的更多信息:

https://laravel.com/docs/5.7/eloquent-mutators#array-and-json-casting

图片上传的一个侧面,您可能希望为上传的文件指定一个唯一的名称,而不是使用用户的文件名,这样,如果用户两次上传相同名称的文档,就不会有冲突。

Laravel通过https://laravel.com/docs/5.7/requests#storing-uploaded-filesstore()方法为您完成所有工作。如果愿意,可以使用storeAs()创建自己的名称。

答案 1 :(得分:0)

第一个数组将模型中的filename列强制转换。有关更多信息:Array & JSON Casting

protected $casts = [
    'filename' => 'array',
];

之后,每当您从House模型中获取文件名时,laravel都会自动将json数据转换为数组。遍历数组并显示图像。

$house = House::find(1);
foreach($house->filename as $filename) {
    echo public_path().'/images/', $filename;
}