Laravel似乎在语法和做事方式上已经改变了几次,所以作为一个新的Laravel开发人员很难找到一个现代的解决方案。
我正在尝试显示相册视图中的album.blade.php文件和JOIN另一个名为AlbumImages的表(/model)。AlbumImages保存url(为图像路径)和album_id属性,而相册本身保存其他数据,如title等等。
这个函数用于显示相册正确之前,我连接两个表(在AlbumController.php):
public function displayAlbum(Album $album) {
return view('view-album', ['album' => $album]);
}
web.php:
Route::get('/album/{album}', [AlbumController::class, "displayAlbum"])->middleware('auth');
问题是我想要连接这两个表,以便访问存储在公共图像文件夹中的专辑图像,并将正确的图像返回给视图(使用url)album_images表).
我试过这个(AlbumController.php):
public function displayAlbum(Album $album) {
$album_combined = DB::table('albums')
->join('album_images', 'albums.id', '=', 'album_images.album_id')
->select('albums.*', 'album_images.*')->get();
return view('view-album', ['album' => $album_combined]);
}
和this (Album.php)模型):
public function getAlbumImages() {
return $this->hasMany(AlbumImages::class, 'album_id', 'id');
}
这些解决方案不起作用,问题是如何正确地做这个方法,它应该在Album
模型函数或AlbumController.php里面完成文件吗?
这是使用Laravel Eloquent Models的完整解决方案;人际关系,希望这能给你一个清晰的想法,关于你能做什么,以及如何达到你想要的结果:
专辑模式:
// bigInteger: id (AUTO_INCREMENT)
// string: name
public function album_images(){
return $this->hasMany(AlbumImage::class);
}
<<p>AlbumImage模型/strong>:// bigInteger: id (AUTO_INCREMENT)
// bigInteger: album_id
// string: image
public function album(){
return $this->belongsTo(Album::class);
}
AlbumController:
public function displayAlbum(Album $album) {
$album->load('album_images');
return view('view-album', compact('album'));
}
view-album(视图):
<h1>{{$album->name}}</h1>
@foreach($album->album_images as $key=> $album_image)
<p> {{$key}} - <img src="{{$album_image->image}}"> </p>
@endforeach
您可以根据需要进一步嵌套。