0

I'm trying to use the @belongsTo relation with this test table employees https://www.w3resource.com/sql-exercises/employee-database-exercise/index.php

I'm using Laravel + Lighthouse

This is the response I'm trying to get

{
emp_name: JONAS
job_name: MANAGER
   {
     { emp_name: SCARLET }
     { emp_name: FRANK }
   }
}

GraphQL-playground query:

-------------- this is wrong sorry, I'm not sure how to do it
{
queryemployees(emp_id:65646){
  emp_name
  job_name
}
}

schema.graphql

type Employee{
 emp_id: ID!
 emp_name: String
 job_name: String
 manager_id: ID
 manager: Employee @belongsTo
}

type Query{
  queryemployees(emp_id:ID!) Employee @find
}



This is my App\Models\Employee.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model  
{

    protected $table = 'employees';
    protected $fillable = ['emp_id', 'emp_name', 'job_name ', 'manager_id', 'hire_date', 'salary ', 'commission', 'dep_id'];

    public function employees(): BelongsTo
    {
        return $this->belongsTo('App\Models\Employee', 'manager_id');
    }

    public function manager(): HasMany
    {
        return $this->hasMany('App\Models\Employee', 'emp_id', 'manager_id');
    }
mentamarindo
  • 539
  • 9
  • 16

1 Answers1

0

Your GraphQL-playground query needs to change

{
  queryEmployees(emp_id: 65646) {
    emp_id
    emp_name
    job_name
    manager {
      emp_id
      emp_name
    }
  }
}

I think your id field is mandatory in response. You need to specify everything you need in the response in GraphQL-playground.

Also you model relationships are in reverse.

employees should be hasMany('App\Models\Employee', 'manager_id', 'emp_id')

manager should be belongsTo('App\Models\Employee', 'manager_id', 'emp_id')

https://laravel.com/docs/7.x/eloquent-relationships#one-to-many