0

我正在尝试将 @belongsTo 关系与此测试表employees https://www.w3resource.com/sql-exercises/employee-database-exercise/index.php

我正在使用 Laravel + Lighthouse

这是我想要得到的回应

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

GraphQL-playground 查询:

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

架构.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
}



这是我的 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');
    }
4

1 回答 1

0

您的 GraphQL-playground 查询需要更改

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

我认为您的 id 字段是强制性的。您需要在 GraphQL-playground 的响应中指定所需的一切。

此外,您的模型关系是相反的。

employees应该hasMany('App\Models\Employee', 'manager_id', 'emp_id')

manager应该belongsTo('App\Models\Employee', 'manager_id', 'emp_id')

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

于 2020-07-06T21:18:51.257 回答