在这个视频里,我们去定义一下多对多的关系。电影还有人物之间的关系是多对多的关系,这个关系会存储在 movie_people 这个表里 ...
我们先去给 people 表创建一个 model ... 在 app 目录的下面 ... models 目录里面,创建一个文件 ... 命名为 People.php ... 定义一个类 ... 名字是 People ... 让它去继承 Eloquent ..
<?php
class People extends Eloquent {
}
在这个类里,先去设置一下跟这个模型对应的数据表的名字 ... 可以去设置一下 $table 属性 ... 跟它对应的数据表是 people ... 如果不设置这个属性的话 ... Eloquent 会认为这个模型的数据表是 peoples ...
protected $table = 'people';
去指定一下 people 表的主键 ... 可以通过 primaryKey 这个属性去设置 .. 设置为 people_id .
protected $primaryKey = 'people_id';
多对多关系
然后再去定义它跟 movies 表之间的多对多的关系 ... 先定义一个公开的函数 ... public function ... 名字可以叫做 movies .. .. 在这个函数里,输入 return ... $this-> ... 然后用 belongsToMany 这个方法 ... 方法里面的参数是 movies 表的模型的名字 ... Movie ...
public function movies() {
return $this->belongsToMany('Movie');
}
这个 movies 方法,可以返回跟 People 模型相关联的所有的 Movie 模型 ... 也就是返回的是跟人物相关的所有的电影 ...
Eloquent 会认为你的数据表里面,有一个 movie_people 表 ... 如果你不是用这样的形式命名这个保存电影和人物之间关系的数据表 ... 可以把你自己定义的表的名称,作为这个 belongsToMany 这个方法的第二个参数 ...
在这个保存关系的表里面,Eloquent 也会认为你的表里会包含 movie_id ... 还有 people_id 这两个字段 ... 如果你用的是其它的名字 .. 可以把它们作为 belongsToMany 的第三个,还有第四个参数传递进来。
下面,我们还需要到 Movie 模型里,去定义这个关系 ...
打开 Movie.php ... 在它里面,再去定义一个公开的函数 ... 可以叫做 people ... 然后返回使用 belongsToMany 方法得到的跟电影相关的所有的人物 ...
public function people() {
return $this->belongsToMany('People');
}
withPivot
在这个关系后面,可以再加上一个 withPivot ,去指定一下要用到的在中间表里面的字段 ... 在我们的 movie_people 表里面,有一个 job 字段,存储的是人物在电影上的工作 ... 如果你想在电影页面上输出相关人物的同时,也需要用到这个人物在电影上的工作,在这里,我们需要去指定一下。
->withPivot('job')
现在, 我们就定义好了电影和人物之间的多对多的关系,在下面的视频里,我们再去看一下怎么样利用这个关系。