Как определить отношение полиморфизма c один-ко-многим для мутаций в Laravel Маяке? - PullRequest
0 голосов
/ 01 мая 2020

Так что я бился головой об стену в этом вопросе, и до сих пор я не нашел решения для этого.

Я создал проект fre sh, cripsy Laravel с последним Lighthouse (4.12), и хотя я пытался следовать документации по этому вопросу, я совершенно растерялся.

Итак, согласно документам я создал следующую схему:

type Query {
    posts: [Post!]! @paginate(defaultCount: 10)
}

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

input CreatePostInput {
  title: String!
  content: String
  images: CreateImageMorphToMany
}

input CreateImageMorphToMany {
  sync: [ID!]
  connect: [ID!]
}


type User {
    id: ID!
    name: String!
    email: String!
    created_at: DateTime!
    updated_at: DateTime!
    images: Image! @morphOne
}

type Post {
    id: ID!
    title: String
    content: String
    images: [Image]! @morphMany
}

type Image {
    id: ID!
    src: String
    name: String
    imageable: Imageable @morphTo
}

union Imageable = Post | User

со следующими классами:

Почтовая модель

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphMany;

class Post extends Model
{

    protected $fillable = [
        'title', 'content'
    ];

    public function images(): MorphMany
    {
        return $this->morphMany('App\Image', 'imageable');
    }
}

Изображение модели

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;

class Image extends Model
{
    public function imageable(): MorphTo
    {
        return $this->morphTo();
    }
}


И миграции:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('content');
            $table->timestamps();
        });
        // This is only here for the sake of simplicity
        Schema::create('images', function (Blueprint $table) {
            $table->id();
            $table->string('src');
            $table->string('name');
            $table->integer('imageable_id');
            $table->string('imageable_type');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
        Schema::dropIfExists('images');
    }
}

И, используя предоставленную площадку GraphQL, я ожидаю, что следующие мутации:

mutation {
  createPost(input: {
    title: "asd", 
    content: "asd",
    images: {
      connect: [1]
    }

  }) {
    title
    images {
      src
    }
  }
}

вернут подключенное / синхронизированное изображение для созданной публикации, но возвращается только сообщение.

Если я установлю отношение вручную и запросить его, все будет работать правильно.

Заранее спасибо!

1 Ответ

0 голосов
/ 10 мая 2020

Оказывается, я неверно истолковал документы (что было обновлено с момента моего вопроса), так как morphone работает точно так же, как hasone, поэтому правильные методы создают, удаляют, обновляют

...