【问题标题】:Lighthouse GraphQL - how to self-reference User type for @belongsToMany?Lighthouse GraphQL - 如何为@belongsToMany 自引用用户类型?
【发布时间】:2021-03-06 10:00:46
【问题描述】:

我正在尝试构建一个非常简单的 Facebook 克隆来提高我对 GraphQL 的了解。我正在为我的 Laravel 后端使用 nuwave/lighthouse 包。目前,当我在 tinker 中运行 $user->friends()->get() 时,它会正确返回结果(所以我知道至少模型关系设置正确)。

本质上,我有一个可以有很多朋友的用户类型。我有一个名为friend_user 的连接表,其中包含friend_iduser_id 列。但是,当我尝试在 GraphQL 操场上运行查询时,我收到错误 "Class 'User' not found"。如何正确地自引用模型/类型?

User.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\BelongsToMany;

class User extends Authenticatable
{
    // define relationships
    public function friends(): BelongsToMany
    {
        return $this->belongsToMany('User', 'friend_user', 'user_id', 'friend_id');
    }
}

user.graphql

extend type Query {
  friends: [User]! @field(resolver: "UserQuery@friends")
}

type User {
    id: ID!
    email: String!
    first_name: String
    last_name: String
    created_at: DateTime!
    updated_at: DateTime!

    friends: [User]! @belongsToMany(relation: "friends")
}

UserQuery.php

<?php

namespace App\GraphQL\Queries;

use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;
use GraphQL\Type\Definition\ResolveInfo;

class UserQuery
{
  /*
  * Return all of a user's friends
  */
  public function friends($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
  {
    $user = $context->user();

    if (!$user) {
      return [];
    }

    return $user->friends()->get();
  }
}

【问题讨论】:

    标签: graphql laravel-lighthouse


    【解决方案1】:

    Welp,发布此内容 8 分钟后,我想通了(经典)。我将belongsToMany 的定义稍微改了一下,看起来像这样:

    public function friends(): BelongsToMany
        {
            return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id');
        }
    

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 2021-08-31
      • 2020-07-05
      • 1970-01-01
      • 2021-12-22
      • 2020-03-23
      • 2019-12-02
      • 2018-11-12
      • 2020-08-11
      相关资源
      最近更新 更多