查询
关联关系的一个例子就是在权限管理中,一个用户可能有多个角色,同时一个角色可能被多个用户共用。例如,很多用户可能都有一个“Admin”角色。要定义这样的关联关系,需要三张数据表:users、roles 和 role_user,role_user 表按照关联模型名的字母顺序命名,并且包含 user_id 和 role_id 两个列。
多对多关联通过编写调用 belongsToMany 方法返回结果的方式来定义,例如,我们在 User 模型上定义 roles 方法:
users表:id,......;
roles表:id,.....;
role_user表:user_id,role_id
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 用户角色
*/
public function roles()
{
//这里要注意,Role前必须加APP\,还有就是第二个参数是表名,数据库里那个表 叫啥,他就叫啥,第三个参数是本类的字段,第四个参数是要查找的字段
return $this->belongsToMany('App\Role','role_user','user_id','role_id');
}
}
//获取数据的方法
$userinfo = $user->find($id);
$return_data = $userinfo->with('roles')->get();
$return_data = $userinfo->roles()->get();
添加多对多关联
$user = App\User::find(1);
$user->roles()->attach(1,['role_id'=>$value]);
或者
$per_id = [1,2,,,]
$user = $UserModel::create($data);
foreach($per_id as $v){
$res->roles()->attach($user ->id,['role_id'=>$v]);
}
同步多对多关联
sync:把1号用户关联的角色同步为2,3号角色,并把关联表2号角色的role_id字段赋值为$value
$user = App\User::find(1);
$user->roles()->sync([2=>['role_id'=>$value],3,4]);
这时1号用户关联的角色就是2,3,4号角色,因为1号角色不在sync方法中,所以同步时1号角色的关联会解除
删除多对多关联
$user = App\User::find(1);
$user->roles()->detach($roleId);
$roleId为2时,删除1号用户的2号角色,1号用户关联的角色还剩下3,4号角色
$roleId为空时,删除1号用户的所有角色,1号用户关联的角色都被删除
$roleId也可以为数组[2,3],删除数组内的指定角色,1号用户关联的角色还剩下4号角色**
所以,detach适合删除关联
网友评论