在Laravel 5.2中按ID显示图像文件

时间:2017-01-12 23:58:31

标签: php mysql laravel laravel-5 laravel-5.2

我有一个名为files的表,它保存了与属性表相关的图像的名称。

我试图使这些图像显示如下关系。

这是属性表的一部分。

enter image description here

这是表格文件及其与属性表的关系。

enter image description here

我可以在控制器的show方法(PropertyController)中传递什么参数?

目前我有以下内容:

public function show($id)
{
 $properties = Property::find($id);

 $files = File::all();

 return View::make('properties.show', ['properties' => $properties, 'files' => $files]);
}

但它返回视图存储在files表中的所有图像。

@foreach($files as $file) 

    <div class="col-md-6 thumb">
        <a class="thumbnail">
            <img id="myImg" src="{{ URL::asset('uploads/products/' . $file->name) }}" alt="{{ $file->name }}" width="300" height="200">
        </a>
    </div>

@endforeach

哪种方法是正确的,以便可以通过属性表中的id显示与记录相关的图像?

2 个答案:

答案 0 :(得分:2)

我假设您在hasMany()Property模型之间使用File关系。如果没有,请在Property模型中创建关系:

public function files()
{
    return $this->hasMany('App\File');
}

使用eager loading

加载包含其所有图片的媒体资源
public function show($id)
{
    $property = Property::with('files')->find($id);
    return view('properties.show', compact('property'));
}

显示图像:

@foreach($property->files as $file) 
    // Here use the same code you used before.
@endforeach

或者,您可以单独加载数据:

public function show($id)
{
    $property = Property::find($id);
    $files = File::where('property_id', $property->id)->get();
    return view('properties.show', compact('property', 'files'));
}

答案 1 :(得分:0)

在您的Property模型中,定义您的hasMany方法,如下所示:

public function files()
{
    return $this->hasMany('App\File');
}

您控制器中的show方法如下:

public function show($id)
{
 $property = Property::find($id);

 $files = $property->files;

 return View::make('properties.show', ['property' => $property, 'files' => $files]);
}