如何将连接变量传递给视图



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

您可以根据需要进一步嵌套。

最新更新