你好吗?
我正在与联合斗争,我想对基于自定义类型的联合类型的自定义解析器进行一些澄清。Mi 当前架构是product.graphql 在内部导入的schema.graphql
type ProductServing {
name: String
price: Float
}
type ProductDish {
price: Float
calories: Int
servings: [ProductServing]
}
type ProductDrink {
price: Float
servings: [ProductServing]
}
union ProductProperties = ProductDish | ProductDrink
type Product {
id: ID!
user: User! @belongsTo
media: Media
blocks: [Block]! @belongsToMany
slug: String!
name: String!
description: String
properties: ProductProperties!
activated_at: DateTime
created_at: DateTime!
updated_at: DateTime!
}
当然,仅此模式是行不通的,因为 Lighthouse 无法理解自定义类型。我为类型创建了两个类:
// App\GraphQL\Types
class ProductDish extends ObjectType
{
public function __construct()
{
$config = [
"name" => "ProductDish",
"fields" => [
"__type" => Type:string(),
"price" => Type::float(),
"calories" => Type::int(),
],
];
parent::__construct($config);
}
}
class ProductDrink extends ObjectType
{
public function __construct()
{
$config = [
"name" => "ProductDrink",
"fields" => [
"__type" => Type:string(),
"price" => Type::float(),
],
];
parent::__construct($config);
}
}
以及使用 __invoke 方法的 ProductProperties 的联合类
这不起作用,否则我就不会在这里,看着 graphql-playground 我收到这条消息
"debugMessage": "Lighthouse failed while trying to load a type: App\\GraphQL\\Types\\ProductDish\n\nMake sure the type is present in your schema definition.\n"
问题是我不确定 1)这是否是正确的方法 2)为什么 lighthouse 无法加载类型。
你能告诉我处理这个问题的正确方法吗?
请记住
ProductDish和ProductDrink不是Eloquent 模型,而是 Product 类型上产品 json 字段属性的简单“包装器”,这是一个 Eloquent 模型
ProductServing也是如此,它是一个键:值对
如果我删除工会,一切都会正常。我的意思是,如果 Product 类型具有分配给 ProductDish 类型或 ProductDrink 的属性,一切都会顺利进行,但我需要联合
慕姐4208626