Lighthouse GraphQL - 如何为@belongsToMany 自引用用户类型?
Lighthouse GraphQL - how to self-reference User type for @belongsToMany?
我正在尝试构建一个非常简单的 Facebook 克隆来提高我对 GraphQL 的了解。我正在为我的 Laravel 后端使用 nuwave/lighthouse 包。目前,当我 运行 $user->friends()->get()
在 tinker 中时,它正确 returns 结果(所以我知道模型关系至少设置正确)。
本质上,我有一个可以有很多朋友的用户类型。我有一个名为 friend_user
的联接 table,其中包含 friend_id
和 user_id
列。但是,当我尝试 运行 GraphQL playground 中的查询时,我收到错误 "Class 'User' not found"
。如何正确地自我引用 model/type?
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();
}
}
好吧,发帖 8 分钟后,我想通了(经典)。我稍微更改了 belongsToMany
定义,使其看起来像这样:
public function friends(): BelongsToMany
{
return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id');
}
我正在尝试构建一个非常简单的 Facebook 克隆来提高我对 GraphQL 的了解。我正在为我的 Laravel 后端使用 nuwave/lighthouse 包。目前,当我 运行 $user->friends()->get()
在 tinker 中时,它正确 returns 结果(所以我知道模型关系至少设置正确)。
本质上,我有一个可以有很多朋友的用户类型。我有一个名为 friend_user
的联接 table,其中包含 friend_id
和 user_id
列。但是,当我尝试 运行 GraphQL playground 中的查询时,我收到错误 "Class 'User' not found"
。如何正确地自我引用 model/type?
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();
}
}
好吧,发帖 8 分钟后,我想通了(经典)。我稍微更改了 belongsToMany
定义,使其看起来像这样:
public function friends(): BelongsToMany
{
return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id');
}