全网最全idea主题,phpstorm主题,webstorm主题免费下载

eloquent关联关系——多对多

描述多对多关系

相对于前面所讲的一对一和一对多(反向多对一)关系,多对多涉及到一个新的方法:belongsToMany,其含义为【属于多个】。多对多关系的表述中,将不再使用hasMany来表达。 

举个例子:一个用户可以有多个角色,一个角色也可以有多个用户。此时我们在两个model中都使用belongsToMany来建立关联关系,即:一个用户被多个角色所拥有,一个角色也被多个用户所拥有。

需要注意的点有:

多对多关系中的支点

多对多关系中的中间表就是一个支点,通过此支点建立两个表之间的多对多关系。

查询多对多关系中的一个model实例时,会发现其带有一个pivot字段。默认pivot包含两个字段,即:两个外键字段。如果实际中间表除了两个外键之外还包含其他字段,并且你想在model的查询结果实例中包含此字段,则需要在belongsToMany之后使用withPivot方法表明你想要包含的支点的字段,比如:

当然有些时候你不想使用pivot这样抽象的字段名来访问支点数据,比如使用subscription这样具体的词来描述一个多对多的订阅关系,那么可以使用as方法来给支字段改名:

 

定义关系的时候可以使用wherePivot和wherePivotIn来过滤关系,比如:

 

定义中间表的模型

讲到这里我们仍然没有给中间表(支点表)建立model,中间表需要继承pivot类,比如:

 

然后可以使用using方法来建立关联关系,比如:

热门评论

    暂无