你好
当我执行我的突变来创建一个产品时,我会得到以下错误:Array to string conversion
。全日志堆栈这里
对于上下文,要创建一个product
,必须创建/关联一个brand
和一个category
。您还可以指定提交产品的user
,但这不是强制性的。
我试着去理解错误并找到解决方案,但是我真的找不到这个问题的根源。
下面是我的模式:
type mutation {
# create_brand ... (crud)
# create_product_category ... (crud)
create_product(input: CreateProductInput! @spread): Product! @create
update_product(input: UpdateProductInput! @spread): Product! @update
remove_product(id: ID!): Product! @delete
}
input CreateProductCategoryInput {
name: String!
}
input CreateBrandInput {
name: String!
}
input CreateProductInput {
name: String!
# ....
submitted_by: CreateUserBelongsTo
brand: CreateBrandBelongsTo!
product_category: CreateProductCategoryBelongsTo!
}
input CreateBrandBelongsTo {
connect: ID
create: CreateBrandInput
update: UpdateBrandInput
disconnect: Boolean
delete: Boolean
}
input CreateProductCategoryBelongsTo {
connect: ID
create: CreateProductCategoryInput
update: UpdateProductCategoryInput
disconnect: Boolean
delete: Boolean
}
我尝试不指定submitted_by
,这是可选的。我的GraphQL请求是这样执行的:
mutation($createProductInput: CreateProductInput!) {
create_product(input: $createProductInput) {
name
description
brand {
name
}
product_category {
name
}
submitted_by {
username
}
}
}
下面是graphql请求的变量:
{
"createProductInput": {
"name": "RTX 3090",
"release_date": "2022-05-08T15:26:35+01:00",
"cover_image": "https://s3.rekk.app/media/rtx.png",
"description": "Description here",
"brand": {
"create": {"name": "NVIDIA"}
},
"product_category": {
"create": {"name": "Graphical Card"}
}
}
}
如果需要,可以在这里找到Product
、ProductCategory
和Brand
模型:https://gist.github.com/SirMishaa/987fd95255dee9fe19d2cba5b1d20e25
期望行为/解决方案
输出/日志
单击以展开
{
"errors": [
{
"debugMessage": "Array to string conversion",
"message": "Internal server error",
"extensions": {
"category": "internal"
},
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"create_product"
],
"trace": [
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Support/Str.php",
"line": 524,
"call": "Illuminate\\Foundation\\Bootstrap\\HandleExceptions::handleError()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/QueryException.php",
"line": 57,
"call": "Illuminate\\Support\\Str::replaceArray()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/QueryException.php",
"line": 40,
"call": "Illuminate\\Database\\QueryException::formatMessage()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php",
"line": 679,
"call": "Illuminate\\Database\\QueryException::__construct()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php",
"line": 638,
"call": "Illuminate\\Database\\Connection::runQueryCallback()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php",
"line": 472,
"call": "Illuminate\\Database\\Connection::run()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php",
"line": 424,
"call": "Illuminate\\Database\\Connection::statement()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php",
"line": 2838,
"call": "Illuminate\\Database\\Connection::insert()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php",
"line": 1560,
"call": "Illuminate\\Database\\Query\\Builder::insert()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
"line": 1028,
"call": "Illuminate\\Database\\Eloquent\\Builder::__call()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
"line": 858,
"call": "Illuminate\\Database\\Eloquent\\Model::performInsert()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Execution/Arguments/SaveModel.php",
"line": 76,
"call": "Illuminate\\Database\\Eloquent\\Model::save()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Execution/Arguments/ResolveNested.php",
"line": 36,
"call": "Nuwave\\Lighthouse\\Execution\\Arguments\\SaveModel::__invoke()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/MutationExecutorDirective.php",
"line": 89,
"call": "Nuwave\\Lighthouse\\Execution\\Arguments\\ResolveNested::__invoke()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Support/Utils.php",
"line": 98,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\MutationExecutorDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/MutationExecutorDirective.php",
"line": 91,
"call": "Nuwave\\Lighthouse\\Support\\Utils::applyEach()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/MutationExecutorDirective.php",
"line": 40,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\MutationExecutorDirective::executeMutation()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php",
"line": 29,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\MutationExecutorDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/MutationExecutorDirective.php",
"line": 52,
"call": "Illuminate\\Database\\Connection::transaction()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/RenameArgsDirective.php",
"line": 33,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\MutationExecutorDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/SpreadDirective.php",
"line": 34,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\RenameArgsDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/ArgTraversalDirective.php",
"line": 29,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\SpreadDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Validation/ValidateDirective.php",
"line": 60,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\ArgTraversalDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/ArgTraversalDirective.php",
"line": 29,
"call": "Nuwave\\Lighthouse\\Validation\\ValidateDirective::Nuwave\\Lighthouse\\Validation\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Directives/TrimDirective.php",
"line": 56,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\ArgTraversalDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/Factories/FieldFactory.php",
"line": 92,
"call": "Nuwave\\Lighthouse\\Schema\\Directives\\TrimDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php",
"line": 624,
"call": "Nuwave\\Lighthouse\\Schema\\Factories\\FieldFactory::Nuwave\\Lighthouse\\Schema\\Factories\\{closure}()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php",
"line": 550,
"call": "GraphQL\\Executor\\ReferenceExecutor::resolveFieldValueOrError()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php",
"line": 474,
"call": "GraphQL\\Executor\\ReferenceExecutor::resolveField()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php",
"line": 858,
"call": "GraphQL\\Executor\\ReferenceExecutor::GraphQL\\Executor\\{closure}()"
},
{
"call": "GraphQL\\Executor\\ReferenceExecutor::GraphQL\\Executor\\{closure}()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php",
"line": 860,
"function": "array_reduce()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php",
"line": 490,
"call": "GraphQL\\Executor\\ReferenceExecutor::promiseReduce()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php",
"line": 263,
"call": "GraphQL\\Executor\\ReferenceExecutor::executeFieldsSerially()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php",
"line": 215,
"call": "GraphQL\\Executor\\ReferenceExecutor::executeOperation()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/Executor/Executor.php",
"line": 156,
"call": "GraphQL\\Executor\\ReferenceExecutor::doExecute()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/GraphQL.php",
"line": 162,
"call": "GraphQL\\Executor\\Executor::promiseToExecute()"
},
{
"file": "/var/www/html/vendor/webonyx/graphql-php/src/GraphQL.php",
"line": 94,
"call": "GraphQL\\GraphQL::promiseToExecute()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php",
"line": 194,
"call": "GraphQL\\GraphQL::executeQuery()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php",
"line": 145,
"call": "Nuwave\\Lighthouse\\GraphQL::executeQuery()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php",
"line": 112,
"call": "Nuwave\\Lighthouse\\GraphQL::executeOperation()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Support/Utils.php",
"line": 98,
"call": "Nuwave\\Lighthouse\\GraphQL::Nuwave\\Lighthouse\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php",
"line": 111,
"call": "Nuwave\\Lighthouse\\Support\\Utils::applyEach()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Support/Http/Controllers/GraphQLController.php",
"line": 32,
"call": "Nuwave\\Lighthouse\\GraphQL::executeOperationOrOperations()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 48,
"call": "Nuwave\\Lighthouse\\Support\\Http\\Controllers\\GraphQLController::__invoke()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 254,
"call": "Illuminate\\Routing\\ControllerDispatcher::dispatch()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 197,
"call": "Illuminate\\Routing\\Route::runController()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 695,
"call": "Illuminate\\Routing\\Route::run()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 128,
"call": "Illuminate\\Routing\\Router::Illuminate\\Routing\\{closure}()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Support/Http/Middleware/AttemptAuthentication.php",
"line": 32,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 167,
"call": "Nuwave\\Lighthouse\\Support\\Http\\Middleware\\AttemptAuthentication::handle()"
},
{
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Support/Http/Middleware/AcceptJson.php",
"line": 27,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 167,
"call": "Nuwave\\Lighthouse\\Support\\Http\\Middleware\\AcceptJson::handle()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 103,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 697,
"call": "Illuminate\\Pipeline\\Pipeline::then()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 672,
"call": "Illuminate\\Routing\\Router::runRouteWithinStack()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 636,
"call": "Illuminate\\Routing\\Router::runRoute()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 625,
"call": "Illuminate\\Routing\\Router::dispatchToRoute()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 166,
"call": "Illuminate\\Routing\\Router::dispatch()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 128,
"call": "Illuminate\\Foundation\\Http\\Kernel::Illuminate\\Foundation\\Http\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"call": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 167,
"call": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull::handle()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 40,
"call": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 167,
"call": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings::handle()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
"line": 27,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 167,
"call": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::handle()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 86,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 167,
"call": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance::handle()"
},
{
"file": "/var/www/html/vendor/fruitcake/laravel-cors/src/HandleCors.php",
"line": 52,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 167,
"call": "Fruitcake\\Cors\\HandleCors::handle()"
},
{
"file": "/var/www/html/vendor/fideloper/proxy/src/TrustProxies.php",
"line": 57,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 167,
"call": "Fideloper\\Proxy\\TrustProxies::handle()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 103,
"call": "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 141,
"call": "Illuminate\\Pipeline\\Pipeline::then()"
},
{
"file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 110,
"call": "Illuminate\\Foundation\\Http\\Kernel::sendRequestThroughRouter()"
},
{
"file": "/var/www/html/public/index.php",
"line": 52,
"call": "Illuminate\\Foundation\\Http\\Kernel::handle()"
},
{
"file": "/var/www/html/server.php",
"line": 21,
"function": "require_once('/var/www/html/public/index.php')"
}
]
}
],
"data": null
}
版本
^5.3
(我猜,它使用的是5.8.3
)^8.12
(8.40)发布于 2022-06-24 17:57:53
我也遇到了同样的问题,这是因为“输入”被当作属性来处理,因此它将输入对象看作是一个单一的属性。
解决这个问题的方法是使用@ see指令,我看到您已经添加了这个指令。
因此,我要说的是,有些东西正在某处被缓存。schemaSticher使用一个环绕file_gets_contents的库。要重新执行file_get_contents,您可以更改文件名。
我会首先把你的突变放在schema.graphql文件中,以确保它们能工作。
https://stackoverflow.com/questions/67449773
复制相似问题