tp框架模型多对多示例

2021-09-26

数据表

// 用户
user
    id - integer
    name - string

// 角色
role
    id - integer
    name - string

// 用户与角色对应关系
role_user
    user_id - integer
    role_id - integer

用户模型

class User extends \think\Model
{
    public function role()
    {
        // 参数依次为:关联模型,中间表表名,关联模型的关联中间表的字段,当前表的关联中间表字段
        // 查询关联表时将使用当前表的主键作为查询依据
        return $this->belongsToMany(Role::class, 'role_user', 'role_id', 'user_id');
    }

    /**
     * @description: 根据用户id获取用户角色
     * 方法执行的查询用户角色的语句为
     * SELECT
     *       `role`.*,
     *       `pivot`.`id` AS `pivot__id`,
     *       `pivot`.`user_id` AS `pivot__user_id`,
     *       `pivot`.`role_id` AS `pivot__role_id` 
     *   FROM
     *       `role` INNER JOIN `role_user` `pivot` ON `pivot`.`role_id` = `role`.`id` 
     *   WHERE
     *       `pivot`.`user_id` = '7'
     * @param {*} $user_id
     * @return {*}
     */
    public function getRoleByUserId($user_id)
    {
        $this->with(['role'])->find($user_id);
    }
}

 

{/if}