thinkphp 关联模型 多对多关联 多表关联查询

多对多的查询

 常见场景是权限控制, 一个用户有多个身份, 一个身份可以给多个用户.

users 模块 和其他模块

namespace app\model;

use think\Model;

class Users extends Model
{
    public function role()
    {
        return $this->belongsToMany(Role::class,Assess::class);
    }
}

在创建两个其他模块文件
Profile模块
Role模块

Assess 中间键模块

namespace app\model;

use think\model\Pivot;

class Assess extends Pivot
{
    public function index()
    {

    }
}

使用的地方 类里

namespace app\controller;

use app\BaseController;
use app\model\Profile;
use app\model\Users;


class Login extends  BaseController
{
    // 创建角色表role 和 中间表Assess
    public function index()
    {
        // 查找用户身份
        // $user = Users::find(12);
        // return json($user->role);

        // 给某某添加已经存在的角色 12是users表的用户id  1 2 3是role表的角色id
         $user = Users::find(12);
        // $user->role()->save(1);
        // $user->role()->saveAll([1,2,3]);
        // 给某某添加新的角色
        // $user->role()->save(['type'=>'测试工程师管理员']);

        // 和save()一样   如果有 可以操作其他字段  操作的是中间表Assess的字段
        // $user->role()->attach(1);
        // $user->role()->attach(7, ['details' => '这里是测试工程师管理员']);

        // 删除中间表的数据 取消 更改用户的角色    1 2 3是role表的角色id
        $user->role()->detach(1);
        // $user->role()->detach([1,2,3]);
    }
  }

posted on 2024-01-24 01:51  完美前端  阅读(50)  评论(0编辑  收藏  举报

导航