其他分享
首页 > 其他分享> > laravel Eloquent 模型 多对多

laravel Eloquent 模型 多对多

作者:互联网

需要使用三个数据表:users、roles 和 role_user。role_user 表命名是以相关联的两个模型数据表来依照字母顺序命名,并包含了 user_id 和 role_id 字段。

多对多关联通过编写一个在自身 Eloquent 类调用的 belongsToMany 的方法来定义。举个例子,让我们在 User 模型中定义 roles 方法:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
/**
* 属于该用户的身份。
*/
public function roles()
{
return $this->belongsToMany('App\Role');
}
}
一旦关联被定义,则可以使用 roles 动态属性来访问用户的身份:

$user = App\User::find(1);

foreach ($user->roles as $role) {
//
}

定义相对的关联
要定义相对于多对多的关联,只需简单的放置另一个名为 belongsToMany 的方法到你关联的模型上。让我们接着以用户身份为例,在 Role 模型中定义 users 方法:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
/**
* 属于该身份的用户。
*/
public function users()
{
return $this->belongsToMany('App\User');
}
}
如你所见,此定义除了简单的参考 App\User 模型外,与 User 的对应完全相同。因为我们重复使用了 belongsToMany 方法,当定义相对于多对多的关联时,所有常用的自定义数据表与键的选项都是可用的。

获取中间表字段
正如你所知,要操作多对多关联需要一个中间数据表。Eloquent 提供了一些有用的方法来和这张表进行交互。例如,假设 User 对象关联到很多的 Role 对象。访问这些关联对象时,我们可以在模型中使用 pivot 属性来访问中间数据表的数据:

$user = App\User::find(1);

foreach ($user->roles as $role) {
echo $role->pivot->created_at;
}

文章来自 www.96net.com.cn

标签:laravel,roles,App,Eloquent,数据表,role,User,模型,user
来源: https://www.cnblogs.com/96net/p/15870968.html