插入多对多的关系,可以使用 attach 或者 sync 方法。比如我们要找给某部电影添加相关的人物,首先可以找到这部电影,然后利用它跟人物之间的多对多的关系,再调用 attach 方法,在方法里,可以指定跟这部电影相关人物的 id 号。
下面,我们可以去演示一下。
打开 routes.php ,在这里我们去添加一条路由 ... 添加一个 get 类型的路由 ... 地址是 related-people ... 这里再用一个匿名函数 ... 这样请求查看 related-people 这个地址的时候,就会去执行在这个匿名函数里面的代码 ... 在这里,我们可以去演示一下插入多对多的关系..
Route::get('related-people', function() {}
... 比如我们想去给 id 号是 2 这部电影添加一个相关的人物。先去看一下这部电影 ... 打开它的页面 ... movies/2
在人物这里,是一个空白的列表,说明还没有给它指定相关的人物。
(#返回),先找到 id 号是 2 的这部电影 ... 可以使用 Movie 模型的 find 方法 ... 把电影的 id 号传递给这个方法。
$movie = Movie::find(2);
接着再去使用电影模型跟人物模型之间的关系 ... 就是我们在 Movie 模型里面定义的 people 方法 ... 再使用 attach ,去给这个电影内容添加相关的人物 ..
比如我们让它去关联 id 号是 x 的这个人物 ... 在 attach 方法里面,输出这个 id 号 .. 这样,会在电影和人物的中间表里面,保存这部电影的 id ,还有在 attach 方法里面指定的这个人物的 id ...
在这个表里,还有一个 job 字段 ... 想同时去设置一下这个字段的值,可以作为 attach 方法的第二个参数传递进去 ... 这个参数是一个数组 .. 数组里面的每个项目就是字段的名称,还有要保存的对应的值 ...
$movie->people()->attach(x, array('job' => '演员'));
(#返回)回到浏览器。
打开 related-people ...
然后再去查看一下 id 号是 2 的这部电影 ... 在人物这里,你会看到,刚才用 attach 方法给它添加的相关的人物 ..
打开数据库管理软件 ... 找到 movie_people 这个表 ... 在这里,你会看到一行新的记录 ... movie_id 是 x ,people_id 是 x ... job 字段的值是 演员 ...
移除
删除电影和人物之间的关联,可以使用 detach ...
(#返回),在这个方法里,指定要取消关联的人物的 id 号 ...
$movie->people()->detach(1);
(#返回),再访问一次 related-people 这个地址 ...
回到电影页面 ...
你会看到,已经取消了之前用 attach 设置的那个关联。