有一个在单个数据库中实现的多租户Laravel应用程序.User型号中有User型号和Role型号,它们之间的关系如下:

public function roles(): BelongsToMany
{
    $relation = $this->belongsToMany(Roles::class, 'role_users', 'user_id', 'role_id')->withTimestamps()->withPivot('tenant_id');
    $relation = $relation->where(function ($query) {
            $query->where('tenant_id', Tenant::current()->id);
        });
    return $relation;
}

role_users张桌子里有user_id, role_id, tenant_id张.一个用户可能存在于多个租户中,当我更新租户中用户的角色时,我只需要更新当前租户的角色,而不是所有租户上的用户角色.以下是我编写的代码:

    $user->roles()->syncWithPivotValues($roles, ['tenant_id' => Tenant::current()->id]);

但它不起作用,并且同步所有角色,而不是当前租户的角色.我怎么才能解决这个问题呢?

推荐答案

您可以使用wherePivot()方法传递租户ID. 您可以在此处找到文档:https://laravel.com/docs/9.x/eloquent-relationships#filtering-queries-via-intermediate-table-columns

然后,代码应如下所示:

$user->roles()->wherePivot('tenant_id', Tenant::current()->id)->sync($roles);

Laravel相关问答推荐

在Laravel Sail Docker环境中的PHPMyAdmin中出现`Out of Memory‘错误

Laravel Horizo​​n 限制与优化

Laravel Homestead vagrant up 超时

如何在 vue 模板中引用 laravel csrf 字段

Laravel belongsTo 关系 - 试图获取非对象的属性

Laravel:如何通过 id 从集合中删除项目

Laravel 查询构建器 - 如何按别名分组,或进行原始 groupBy

Laravel Blade 没有额外的空格?

Laravel 使用 Storage::put 生成唯一 ID

如何在 Laravel Eloquent 中 Select 某些字段?

如何从 Windows 命令提示符在 Laravel 中运行 PHPUnit

Laravel 5 环境配置数组?

日期验证 - 如何本地化/翻译字符串今天和明天

Laravel Eloquent 模型中的字段

反向代理后面的 Laravel 路由

Laravel 5 - 判断日期是否是今天

Laravel 5 事件处理程序未触发

使用哪个 Auth::check() 或 Auth::user() - Laravel 5.1?

Laravel s3 多桶

使用 Laravel Mix 合并多个文件