У меня есть проект Laravel 7 с текущим Lighthouse php оболочкой для graphql.
У меня есть объект группы и объект темы. У команды может быть одна тема, вызов ее с помощью вложенного запроса отлично работает:
Запрос
{
teams {
id
name
enabled
theme{
id
name
color
whitelabel
}
created_at
updated_at
}
}
Частичный результат:
"data": {
"teams": [
{
"id": "1",
"name": "Gusikowski, Mosciski and Mills",
"enabled": true,
"theme": {
"id": "1",
"name": "culpa",
"color": "MediumVioletRed",
"whitelabel": true
},
"created_at": "2020-07-10 09:03:51",
"updated_at": "2020-07-10 09:03:51"
},
{
"id": "2",
"name": "Hammes and Sons",
"enabled": true,
"theme": {
"id": "2",
"name": "quidem",
"color": "Cornsilk",
"whitelabel": false
},
"created_at": "2020-07-10 09:03:51",
"updated_at": "2020-07-10 09:03:51"
},
Но когда я пытаюсь сделать вложенная мутация, Lighthouse не распознает аргумент «тема», который я отправляю.
Запрос
mutation{
createTeam(
input: {
name: "testewr"
domain: "domain"
logo: "default"
enabled: true
unlocked: true
theme: { connect: 14 }
})
{
id
name
}
}
Результат:
"errors": [
{
"debugMessage": "SQLSTATE[HY000]: General error: 1364 Field 'theme' doesn't have a default value (SQL: insert into `teams` (`name`, `domain`, `logo`, `enabled`, `unlocked`, `updated_at`, `created_at`) values (testewr, domain, default, 1, 1, 2020-07-10 10:49:14, 2020-07-10 10:49:14))",
"message": "Internal server error",
"extensions": {
"category": "internal"
},
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createTeam"
],
Моя команда красноречивая модель:
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class Team extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'domain', 'default_filters', 'logo', 'enabled', 'unlocked', 'theme'
];
/**
* Get the theme record associated with the team.
*/
public function theme() : HasOne
{
return $this->hasOne(Theme::class,'id');
}
}
Модель graphql темы:
type Theme implements identifiable & nameable
{
id: ID!
name: String!
logo: String
color: String
fonts: String
primary_color: String
background_color: String
whitelabel: Boolean
}
input CreateThemeHasOne
{
connect: ID
create: CreateThemeInput
update: UpdateThemeInput
upsert: UpsertThemeInput
}
input CreateThemeInput
{
name: String!
logo: String
color: String
fonts: String
primary_color: String
background_color: String
whitelabel: Boolean
}
Модель команды graphql:
type Team implements identifiable & nameable & enabable
{
id: ID!
name: String!
domain: String!
default_filters: String!
logo: String!
enabled: Boolean!
unlocked: Boolean!
theme: Theme @hasOne
created_at: DateTime
updated_at: DateTime
}
input CreateTeamInput
{
name: String!
domain: String!
default_filters: String
logo: String!
enabled: Boolean!
unlocked: Boolean!
theme: CreateThemeHasOne!
}
Что я сделал не так? Я перепробовал все варианты из списка php документов, которые смог найти.