Маяк php || Поле не имеет значения по умолчанию при попытке установить связь один на один - PullRequest
0 голосов
/ 10 июля 2020

У меня есть проект 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 документов, которые смог найти.

...