我是laravel的新手,之前我从未建立过播放列表类型的实体,所以我正在寻找最佳实践和指导。
我有两个模型歌曲和播放列表。
播放列表中有很多歌曲。我希望用户能够填写单个表单来创建/编辑播放列表并选择尽可能多的歌曲。
最好的方法是什么?有没有办法将一组id作为外键存储到歌曲表中?或者这应该总是写出许多行到映射表?
laravel或eloquent是否有办法协助这种模型的CRUD?什么是最佳做法?
答案 0 :(得分:2)
是的,Laravel支持M:N关系。在我看来,做你想做的最简单的方法是创建一个playlist_song
表并存储song
和playlist
之间的所有关系。
您可以使用attach
,detach
和sync
方法来控制外来关系。为了更容易理解,我做了一个例子:
class Song extends \Eloquent {
public function playlists() {
return $this->belongsToMany('Model\Playlist', 'playlist_song');
}
}
class Playlist extends \Eloquent {
public function songs() {
return $this->belongsToMany('Model\Songs', 'playlist_song');
}
}
在您的控制器中,您可以使用类似的内容来同步播放列表中包含的所有歌曲:
$playlist->songs()->sync(array(1, 2, 3)); // The numbers are the ids
有关Laravel Eloquent的完整文档,请查看http://laravel.com/docs/4.2/eloquent