繁体   English   中英

Laravel Lighthouse 检索数据透视表

[英]Laravel Lighthouse retrieving pivot data

我正在使用 Laravel Lighthouse v4.16 为我的项目编写 API。 大多数突变和查询都可以正常工作。 但是当我尝试查询数据透视数据时,结果表明所有数据透视数据都为空。

所以我们有 3 个不同的模型 我只会展示导致问题的关系

用户

public function companies(): BelongsToMany {
    return $this->belongsToMany(Company::class)
        ->using(CompanyUser::class)
        ->withPivot(
            'personnel_number',
        );
}

公司

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

CompanyUser - 扩展支点

public function user(): BelongsTo {
    return $this->belongsTo('App\Models\Tenant\User', 'user_id');
}

public function company(): BelongsTo {
    return $this->belongsTo('App\Models\Tenant\Company', 'company_id');
}

这些在 Graphql 中表示为以下类型

type User {
    id: ID!
    title: String
    companies: [Company!] @belongsToMany
    pivot: CompanyUser
}

type Company {
    id: ID!
    name: String
    users: [User] @belongsToMany
}

type CompanyUser {
    id: ID!
    personnel_number: String
    user: User! @belongsTo
    company: Company! @belongsTo
}

但是当我运行以下查询时,关系被成功检索,但枢轴保持为空。

{
 user(id: 1) {
    id
    first_name
    companies {
      id
      name
    }
    pivot {
      personnel_number
    }
  }
}

该查询的结果如下所示

{
  "data": {
    "user": {
      "id": "1",
      "first_name": "Mike",
      "companies": [
        {
          "id": "1",
          "name": "company_name_1"
        }
      ],
      "pivot": null
     }
   }
}

问题是查询中pivot的位置, pivot应该在关系内(即:它将在表的连接加载关系后加载)。

因此,为了实现这一目标,您需要进行以下更改:

  • 在类型:
type Company {
    id: ID!
    name: String

    users: [User] @belongsToMany
    pivot: CompanyUser # add
}
  • 在查询中:
{
  user(id: 1) {
    id
    first_name
    companies {
      id
      name
      pivot { # moved here, inside companies relations
        personnel_number
      }
    }
  }
}

备注:您可以在没有CompanyUser类的情况下操作数据透视表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM