【问题标题】:Laravel Lighthouse retrieving pivot dataLaravel Lighthouse 检索数据透视表
【发布时间】:2021-01-22 19:39:10
【问题描述】:

我正在使用 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
     }
   }
}

【问题讨论】:

    标签: laravel graphql laravel-lighthouse


    【解决方案1】:

    问题是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 类的情况下操作数据透视表。

    【讨论】:

      猜你喜欢
      • 2015-01-27
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 2018-04-10
      相关资源
      最近更新 更多