Laravel:将类别名称附加到返回的对象

时间:2018-04-22 17:25:30

标签: php laravel

我不确定我是否走在正确的轨道上。在数据库$?中,我将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对象?或者是否有更好的方法可以在此对象中公开类别名称?

1 个答案:

答案 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的最佳实践