Задать вопрос
@ettychel

Почему не работает связь Eloquent?

Добрый день
Есть 3 таблицы:
PM
Event
SnPmContact

Сделал связи в моделях:
PM
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class PM extends Model
{
    public $timestamps = false;

    public function events()
    {
        return $this->hasMany(Event::class, 'pm_id', 'PODE');
    }

    public function contacts()
    {
        return $this->hasMany(SnPmContact::class, 'PODE_PM', 'PODE');
    }
}

Event
namespace App\Models;

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

class Event extends Model
{

    public function pm(): BelongsTo
    {
        return $this->belongsTo(PM::class, 'pm_id', 'PODE');
    }

    public function contacts(): BelongsTo
    {
        return $this->belongsTo(SnPmContact::class, 'pm_id', 'PODE_PM');
    }
}

SnPmContact
namespace App\Models;

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

class SnPmContact extends Model
{

    public function pm(): BelongsTo
    {
        return $this->belongsTo(PM::class, 'PODE_PM', 'PODE');
    }

    public function events()
    {
        return $this->belongsTo(Event::class, 'PODE_PM', 'pm_id');
    }
}

Используя роут протестировал связь таким вот запросом, что она работает
App\Models\SnPmContact::select(['PODE_PM', 'USER_NAME'])->with(['pm:PODE'])->get()

Запрос возвращает данные, всё прекрасно

Потом решил добавить связь в GraphQL (использую вот этот пакет)
Type GraphQL
type PM {
    ID: Int
    PODE: Int
    NAMEPM: String
    NAME2PM: String
    TIME_ZONE: Int
    contacts: [SnPmContact]
    events: [Event]
}

type SnPmContact {
    PODE_PM: Int
    USER_NAME: String
    USER_POST: String
    pm: PM
    events: [Event]
}

type Event {
    id: Int!
    pm_id: Int!
    start_time: DateTime
    status: Int
    type: Int
    log_text: String
    created_at: DateTime
    updated_at: DateTime
    pm: PM
    contacts: [SnPmContact]
}

Добавил Query
type Query {
    contactsByPodePM(PODE_PM: Int! @where): [SnPmContact] @all 
}


И собственно связь отказывается работать, вот ошибка по одному объекту:
Ошибка
{
      "message": "Internal server error",
      "extensions": {
        "category": "internal"
      },
      "locations": [
        {
          "line": 4,
          "column": 5
        }
      ],
      "path": [
        "contacts",
        0,
        "pm"
      ]
    }


Собственно в чём ошибка не понятно, при этом связь у Event->pm работает и в GraphQL отлично, а у SnPmContact->pm именно в GraphQL не работает.
Помогите разобраться
  • Вопрос задан
  • 203 просмотра
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
@ettychel Автор вопроса
Помогло указание первичного ключа в модели
protected $primaryKey = 'PODE_PM';
Хз чё ему не нравилось
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы