想要同时插入多个多对多的关系,可以使用 sync 这个方法。比如我可以同进为某部电影去关联多个人物,同时也可以设置中间表里面的字段,在我们这里,就是 job 这个字段。
打开 routes.php ... 还是在 related-people 这个路由里去试一下。
首先可以找到某部电影,用 Movie 模型的 find 方法。然后再利用它跟 People 模型之间的关系。再去使用 sync 这个方法 ... 这个方法的参数是一个数组,数组里面的项目可以是要关联的资源列表 ... 这里就是人物内容的 id 号 ... 比如要给 id 号是 2 的这部电影去关联 id 号是 x, x,x 的这几个人物 ...
$movie->people()->sync(array(1,2,3));
(#浏览器) 去访问一下 related-people 这个地址 ...
再回到 id 号是 2 的这个电影页面 ...
在人物这里,你会看到,刚才使用 sync 方法关联人物。我们可以再去数据库里看一下 (sequel pro)...
在 movie_people 表里面,会找到几条记录 .. 这就是刚才用 sync 方法插入进来了 ... 不过这些记录里面没有存储 job 这个字段的内容 ...
(#返回),我们可以先取消关联这些人物 ... 用的是 detach 方法 ...
$movie->people()->detach(array(1,2,3));
(#浏览器),访问一下 related-people 这个地址 ... 这样会为 id 号是 2 的这部电影,取消关联指定的人物 ...
下面,我们再去试一下 sync 方法,这里,在关联人物的同时,去设置一下 job 字段的内容 ...
要关联的东西还是在一个数组里面 ... 在这个数组里面,每个项目可以使用资源 id 号,再加上对应的中间表字段的名称还有值 ...
先是要关联的人物内容的 id 号 ... 用它作为这个项目的 key ,然后再设置跟它对应的值 ... 也就是中间表的字段还有对应的值 ... 这些内容可以再放在一个数组里面 ... 再用这样的形式,去设置一下其它的要关联的人物 ..
$movie->people()->sync(array(
1 => array('job' => '演员'),
2 => array('job' => '演员'),
3 => array('job' => '演员')
));
保存 ... 再去请求一下 related-people ... 这个地址 ... 这样可以执行我们在处理这个地址的路由里面设置的代码 ...
然后再回到电影页面 ...