У меня возникли некоторые проблемы, связанные с вложением мутаций в Lighthouse.
У меня есть две связанные модели: Ams\Account
hasMany Ams\Contact
. Это модель Ams\Contact
:
namespace App\Models\Ams;
use Eloquent as Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Contact extends Model
{
use SoftDeletes;
public $table = 'ams_contacts';
protected $dates = ['deleted_at'];
public $fillable = [
'ams_account_id',
'forename',
'surname',
'active',
'email'
];
protected $casts = [
'forename' => 'string',
'surname' => 'string',
'active' => 'boolean',
'email' => 'string'
];
public static $rules = [
'ams_account_id' => 'required',
'forename' => 'required',
'surname' => 'required',
'email' => 'required|email'
];
public function amsAccount(): BelongsTo
{
return $this->belongsTo(\App\Models\Ams\Account::class, 'ams_account_id', 'id');
}
}
Мой файл схемы GraphQL выглядит следующим образом:
"A datetime string with format `Y-m-d H:i:s`, e.g. `2018-01-01 13:00:00`."
scalar DateTime @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\DateTime")
"A date string with format `Y-m-d`, e.g. `2011-05-23`."
scalar Date @scalar(class: "Nuwave\\Lighthouse\\Schema\\Types\\Scalars\\Date")
type Query {
amsAccounts: [AmsAccount!]! @paginate(defaultCount: 10 model: "App\\Models\\Ams\\Account")
amsAccount(id: ID @globalId): AmsAccount @find(model: "App\\Models\\Ams\\Account")
amsContacts: [AmsContact!]! @paginate(defaultCount: 10 model: "App\\Models\\Ams\\Contact")
amsContact(id: ID @globalId): AmsContact @find(model: "App\\Models\\Ams\\Contact")
}
type Mutation {
createAmsAccount(
input: CreateAmsAccountInput! @spread
): AmsAccount @create(model: "App\\Models\\Ams\\Account")
updateAmsAccount(
input: UpdateAmsAccountInput! @spread
): AmsAccount @update(model: "App\\Models\\Ams\\Account")
deleteAmsAccount(
id: ID! @rules(apply: ["required"])
): AmsAccount @delete(model: "App\\Models\\Ams\\Account")
createAmsContact(
input: CreateAmsContactInput! @spread
): AmsContact @create(model: "App\\Models\\Ams\\Contact")
updateAmsContact(
input: UpdateAmsContactInput! @spread
): AmsContact @update(model: "App\\Models\\Ams\\Contact")
deleteAmsContact(
id: ID! @rules(apply: ["required"])
): AmsContact @delete(model: "App\\Models\\Ams\\Contact")
}
type AmsAccount @node(namespace: "App\\Models\\Ams\\Account") {
id: ID! @globalId
name: String!
url: String
telephone: String!
created_at: DateTime!
updated_at: DateTime!
}
input CreateAmsAccountInput {
name: String!
url: String
telephone: String!
}
input UpdateAmsAccountInput {
id: ID!
name: String!
url: String
telephone: String!
}
input UpsertAmsAccountInput {
id: ID!
name: String!
url: String
telephone: String!
}
type AmsContact @node(namespace: "App\\Models\\Ams\\Contact") {
id: ID! @globalId
forename: String!
surname: String!
active: Boolean
email: String!
amsAccount: AmsAccount! @belongsTo
created_at: DateTime!
updated_at: DateTime!
}
input CreateAmsContactInput {
forename: String!
surname: String!
active: Boolean
email: String!
amsAccount: CreateAmsAccountBelongsTo
}
input UpdateAmsContactInput {
id: ID!
forename: String!
surname: String!
active: Boolean
email: String!
amsAccount: UpdateAmsAccountBelongsTo
}
input UpsertAmsContactInput {
id: ID!
forename: String!
surname: String!
active: Boolean
email: String!
amsAccount: UpsertAmsAccountBelongsTo
}
input CreateAmsAccountBelongsTo {
connect: ID
create: CreateAmsAccountInput
update: UpdateAmsAccountInput
upsert: UpsertAmsAccountInput
}
input UpdateAmsAccountBelongsTo {
connect: ID
create: CreateAmsAccountInput
update: UpdateAmsAccountInput
upsert: UpsertAmsAccountInput
disconnect: Boolean
delete: Boolean
}
input UpsertAmsAccountBelongsTo {
connect: ID
create: CreateAmsAccountInput
update: UpdateAmsAccountInput
upsert: UpsertAmsAccountInput
disconnect: Boolean
delete: Boolean
}
Когда я пытаюсь запустить следующую мутацию на игровой площадке:
mutation {
createAmsContact(
input: {
forename: "Jane"
surname: "Doe"
active: true
email: "jd@example.com"
amsAccount: {
connect: 1
}
}
) {
id
forename
surname
amsAccount: id
}
}
Я получаю сообщение об ошибке, содержащее следующее сообщение об ошибке:
"debugMessage": "SQLSTATE[HY000]: General error: 1364 Field 'ams_account_id' doesn't have a default value (SQL: insert into `ams_contacts` (`forename`, `surname`, `active`, `email`, `updated_at`, `created_at`) values (Jane, Doe, 1, jd@example.com, 2020-04-12 15:31:52, 2020-04-12 15:31:52))"
Я попробовал несколько исправлений и предложений со всего Интернета, и, насколько я вижу, моя схема соответствует определенный формат из документации, но я не могу понять, почему он не работает.
Я также подтвердил, что простая мутация для учетной записи работает нормально. Я также получаю аналогичное сообщение об ошибке, когда пытаюсь создать новую учетную запись одновременно с контактом.
Я склоняюсь к тому, что это связано с пространствами имен разных моделей, но я не могу себе представить, Я первый предъявляю это требование, и при этом я не могу найти никаких ссылок на то, как преодолеть это.
Любая помощь будет принята с благодарностью.