我在Laravel有以下型号:

  • 用户模型
  • 团队模型
  • 公司模式

和DB表:

users
- id

company
- id

teams
- id
- company_id  (team can only belong to one company)

// pivot tables
company_user
- user_id
- company_id

team_user
- team_id
- user_id

我正试图在用户模型上创建关系,这将得到公司与团队,只属于该用户.我可以加入,但我想要一段关系.我试过不同的套餐,但还是弄不明白.只是可悲的8个小时.

推荐答案

在您的场景中,一个用户可以为多个公司工作,每个公司可以有多个团队.您希望轻松查看用户属于哪些公司,以及他们在这些公司中所属的特定团队.

为此,您可以在User模型中创建一个名为"companyWithTeams"的函数.

该功能将识别一个用户可以链接到多个公司,并使用名为"CompanyUser"的透视表标签来跟踪这些关系.它还可以从"CompanyUser"中获得user_ids分,以链接正确的团队.此函数将获取用户所属的公司,但也可以立即获取这些公司内的团队.

User Model:

public function companyWithTeams()
{
    return $this->belongsToMany(Company::class)
                ->using(CompanyUser::class)
                ->withPivot('user_id')
                ->with(['teams' => function ($query) {
                    // Filter teams to those that the user belongs to
                    $query->whereHas('users', function ($query) {
                        $query->where('user_id', $this->id);
                    });
                }]);
}

Company Model:

public function users()
{
    return $this->belongsToMany(User::class)
                ->using(CompanyUser::class)
                ->withPivot('user_id');
}

public function teams()
{
    return $this->hasMany(Team::class);
}

Team Model:

public function company()
{
    return $this->belongsTo(Company::class);
}

public function users()
{
    return $this->belongsToMany(User::class)
                ->using(TeamUser::class)
                ->withPivot('user_id');
}

In your controller you can access:

$user = User::find(1);
$companyWithTeams = $user->companyWithTeams;

$companyName = $companyWithTeams->name;

foreach ($companyWithTeams->teams as $team) {
    echo $team->name;
}

here is a similar question:

How to get records from 3 belongsToMany

Php相关问答推荐

为什么注册SIGHUP的处理程序函数会阻止在PHP CLI中等待输入时点击X关闭Xterm窗口?""

PHP FFI—Convert void * to int

在WooCommerce中禁用特定日期之前的免费送货

中继器内置中继器的ACF WordPress组

将部分产品排除在WooCommerce的计算附加费之外

如何使用定制的StateProvider设置JsonLd@上下文?

Laravel路由到控制器传输变量解决方案需要

在WooCommerce管理中为订单项目添加自定义字段价格值

在WooCommerce中以编程方式添加特定产品后,将价格设置为零

如何批量处理消息总线中的消息

Filament v3:具有 hasMany 和 BelongsTo 的关系管理器

PHP 数组中第一级 node 到 XML 的唯一名称

Google Drive API 服务->文件->get('root') 失败并显示找不到文件. (范围问题?)

PHP Symfony 在测试.env文件中将接口自动装配作为构造函数参数,但使用接口的特定类

PHP 合并/合并多维数组

适当的时区处理 Laravel / Carbon

使用 GROUP_CONCAT 规范化/转置来自查询的数据

如果 static:: 被解析为B,为什么 PHP 会执行A的方法

为什么非贪婪匹配会消耗整个模式,即使后面跟着另一个非贪婪匹配

如何在运行 update_post_meta 后更新 wp_wc_product_attributes_lookup 表?