我的上传表中有多张图像,这些图像与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
在VehicleController中,车辆表与图像表和数据抓取之间有很多关系,
$vehicles = Vehicle::with('uploads')->get();
return view('vechicles.index')->withVehicles($vehicles);
现在这些图像显示在Vehicles / index.blade.php文件中
@foreach($vehicle->uploads as $upload)
<tr>
<td><a href="{{route('vechicles.show',$vehicle->id)}}"><img src="/images/{{ $upload->resized_name }}"></a></td>
</tr>
@endforeach
我的问题现在发生了,通过这种方式,我可以在表格中显示与正确的 vehicle_id 相关的所有图像,但是,我只需要显示一张图像(与匹配的 vehicle_id )就像缩略图一样位于上方。那我该如何配置呢?实际上,我只需要在一张index.blade.php文件中打印一张图像就可以在每个vehicle_id中进行关联, 举例来说,这里有4张与vehicle_id 1相关的图像,但是我只需要打印下降的一张图像就可以打印,并且要与vehicle_id 2相同,等等。。。怎么做?
更新的用户模型
class Upload extends Model
{
public function vehicle()
{
return $this->belongsTo(Vehicle::class);
}
}
更新的车辆型号
class Vehicle {
public function thumbnail() {
return $this->hasOne(Upload::class)->orderByDesc('id');
}
}
$vehicles = Vehicle::with('thumbnail')->get();
当前Blade文件
@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
答案 0 :(得分:0)
@Jonas Staudenmeier解决方案是最干净的。但是,如果由于某种原因无法更新模型,则可以在任何刀片服务器模板中使用它。
app / Http / Controllers / VehiculeController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Vehicule;
class VehiculeController extends Controller {
public function index() {
$vehicules = Vehicule::with('uploads')->get();
return view('vehicule.index')->withVehicules($vehicules);
}
}
?>
resources / views / vehicule / index.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<table>
<tbody>
@forelse( $vehicules as $vehicule )
<td>
@if( $vehicule->uploads->count() > 0 )
<a href="{{ route('vehicules.show', $vehicule->id) }}">
@php
$upload = $vehicule->uploads->sortByDesc('id')->first();
@endphp
<img src="{{ $upload->resized_name }}" alt="{{ $upload->fileName }}" />
</a>
@else
This vehicule does not have any images attached.
@endif
</td>
@empty
<td>No vehicules to display.</td>
@endforelse
</tbody>
</table>
</body>
</html>
在这里,我们使用Laravel Collection ->first()
方法来获取第一个方法,但是不要忘记(在示例中已完成此操作),当您检查是否有任何上传(或一般关系)得到第一个元素。
获取模型的关系时,所有Laravel Collection methods都可用,直到您使用修整器(first
,all
,...)为止。
答案 1 :(得分:0)
请尝试使用latest关系方法来获取最新模型。
class Vehicle {
public function thumbnail() {
return $this->hasOne(Upload::class)->latest();
}
}