Lighthouse GraphQL - как создать ссылку на тип пользователя для @belongsToMany?

Я пытаюсь создать очень простой клон Facebook, чтобы улучшить свои знания GraphQL. Я использую пакет nuwave / lighthouse для своей серверной части Laravel. В настоящее время, когда я запускаю $user->friends()->get() в tinker, он правильно возвращает результаты (так что я знаю, что отношения модели установлены правильно, по крайней мере).

По сути, у меня есть тип пользователя, у которого может быть много друзей. У меня есть таблица соединений под названием friend_user, которая содержит столбцы friend_id и user_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();
  }
}

person J. Jackson    schedule 23.11.2020    source источник


Ответы (1)


Welp, через 8 минут после публикации я разобрался (классический). Я немного изменил определение belongsToMany, чтобы оно выглядело так:

public function friends(): BelongsToMany
    {
        return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id');
    }
person J. Jackson    schedule 23.11.2020