如何从Laravel 5.6

时间:2018-07-15 10:22:27

标签: php laravel-5

我正在使用laravel 5.6,并且在我的上载表中有多个与vehicle_id相关的图像,像这样的外键,

uploads table
id          fileName        vehicle_id
1            1.jpg               1
2            2.jpg               1
3            3.jpg               1
4            4.jpg               1
5            28.png              2
6            28.png              2
7            29.png              2
8            30.png              3
9            31.png              3
10           56.png              3

车辆表与上传表有很多关系,

public function thumbnail() {
    return $this->hasMany(Upload::class)->orderByDesc('id');
}

VehicleController是

public function index()
    {
        $vehicles = Vehicle::with('thumbnail')->get();
        return view('vechicles.index')->withVehicles($vehicles);
}

和显示index.blade.php文件的数据是

@if($vehicles)
@foreach($vehicles as $vehicle)
{{$vehicle->district}}
{{$vehicle->town}}
{{$vehicle->brand}}
{{$vehicle->model}}

<hr>

 <tr>
  @foreach($vehicle->thumbnail as $aaa)
                    <img src="/images/{{ $aaa->resized_name }}">
                    @endforeach

                </tr>


@endforeach
@endif

但是仍然在我的视图文件中,我可以显示多个与vehicle_id相关的图像(不仅仅显示一个与vehicle_id相关的图像),然后如何仅显示一个与每个vehicle_id相关的图像?

2 个答案:

答案 0 :(得分:0)

通过Constraining Eager Loading建立您的关系,并限制由此带来的结果。

替换行

$vehicles = Vehicle::with('thumbnail')->get();

通过以下

$vehicles = Vehicle::with([
    'thumbnail' => function ($q) {
        $q->limit(1);
    }
])->get();

您也可以使用first方法而不是使用限制,

另一种方法是使用有限的缩略图创建新的关系,在您的车辆模型中添加新的关系,例如

public function oneThumb () { // or whatever your method name
    return $this->hasMany(Upload::class)->orderByDesc('id')->limit(1);
}

答案 1 :(得分:0)

您可以做三件事:

  1. 将查询限制为每个ID仅提供一个结果
  2. 更改表结构并添加“ featured_image”列,以标识要在视图上显示的相关图像。
  3. 按vehicle_id对结果进行分组,因此每个vehicle_id仅获得一张图像。

我希望有帮助。