Lightouse PHP Graphql - Как создать отношения? - PullRequest
0 голосов
/ 27 апреля 2020

Я изо всех сил пытаюсь понять, как создать отношения через маяк. Допустим, у меня есть модель Post, которая belongsTo a User. В моем schema.graphql у меня есть:

type Mutation {
  createPost(input: CreatePostInput! @spread): Post! @create
}

input CreatePostInput! {
  text: String!
  user: BelongsToUser!
}

input BelongsToUser {
  connect: ID!
}

И мой объект Post в базе данных имеет столбец внешнего ключа user_id

Когда я запускаю запрос:

mutation {
  createPost(input: {
    text: "Hello World",
    user: {
      connect: 1
    }
  }){
    id
  }
}

Я получаю сообщение об ошибке: Field 'user_id' doesn't have a default value

Мне кажется, что я делаю что-то не так, когда эта мутация не обновляет правильный столбец для отношений, может кто-нибудь указать мне, что я могу быть делать неправильно? (Если я сделаю столбец обнуляемым со значением по умолчанию в базе данных, он будет вставлен, но связь, конечно, неверна. Я также могу настроить схему graphql для использования user_id: Int, которая работает, но выглядит как неправильный путь что-то делать.)

Все работает правильно через Eloquent, и запросы graphql работают, правильно вытягивая связанные объекты.

Примечание: Согласно документации , Я определил возвращаемый класс отношений в моей модели:

class Post extends Model
{
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }
}

и соответствующую миграцию:

Schema::create('posts', function (Blueprint $table) {
  $table->id();
  $table->foreignId('user_id')->constrained();
  $table->string('text');
  ...

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Хорошо, проблема была в том, что, хотя тип возвращаемого значения был определен в модели, я не смог импортировать его выше:

use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Post extends Model
{
    public function user(): BelongsTo
    ...

?‍♂️

0 голосов
/ 27 апреля 2020

Я не уверен, но используете правильные ключи? В разделе php my admin go to designer и выберите отношение, если вы получили, получите более четкую ошибку, чтобы узнать больше о конструкторе перейдите по этой ссылке https://kb.bodhost.com/turn-the-designer-mode-on-in-phpmyadmin/

...