我不确定我是否走在正确的轨道上。在数据库$?
中,我将songs
存储为整数,在genre_id
表中,我有该类型的ID和名称。
从此genres
函数返回歌曲时,我想在我的findBySlug
对象中包含该类型名称。
$song
目前,public function findBySlugOrFail($slug)
{
$song = $this->song->whereSlug($slug)->first();
$genre = Genre::where('id', $song->genre_id)->first();
$genreName = $genre->name; // returns string "Rock"
return $song;
}
会返回此信息:
$song
有没有办法让{
"id":1,
"user_id":1,
"genre_id":1,
"artist":"U2",
"title":"Beautiful Day",
"slug":"beautiful-day"
}
附加到$genreName
对象?或者是否有更好的方法可以在此对象中公开类别名称?
答案 0 :(得分:1)
有很多方法可以做到这一点。
最常见的是:
public function findBySlugOrFail($slug)
{
$song = $this->song->whereSlug($slug)->with('genre')->first();
return $song;
}
但是对象会有所不同。它将附加整个genre
对象。
这种情况最简单:
public function findBySlugOrFail($slug)
{
$song = $this->song->whereSlug($slug)->first();
$song->genre_name = $song->genre()->first()->name;
return $song;
}
您还可以在getGenreNameAttribute()
模型上定义名为Song
的{{3}}。
或者您可以创建an accessor并准确定义对象的返回方式。这个可能是API的最佳实践