Lightouse PHP Graphql - Как наладить отношения?

Я изо всех сил пытаюсь понять, как налаживать отношения с помощью маяка. Допустим, у меня есть Post модель, которая belongsTo 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');
  ...

person waffl    schedule 27.04.2020    source источник


Ответы (2)


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

person Alaa ebeed    schedule 27.04.2020

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

use Illuminate\Database\Eloquent\Relations\BelongsTo;

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

????‍♂️

person waffl    schedule 27.04.2020