4

使用像下面这样的模式,有没有办法执行查询并根据实体的name属性对结果进行排序?JobType我想要一个分页的工作列表,并按字母顺序显示按工作类型名称排序的结果。

extend type Query @middleware(checks: ["auth:api"]) {
    jobs(orderBy: _ @orderBy): [Job!]! @paginate(defaultCount: 10, model: "App\\Job")
}

type Job {
    id: ID!
    description: String!
    job_type: JobType! @belongsTo
}

type JobType {
    id: ID!
    name: String!
}

我尝试使用该@builder指令,然后使用构建器中的连接以这种方式引入 name 属性,但这似乎会导致实体 ID 出现一些问题,从而导致关系链接到错误的事物。

有任何想法吗?

4

2 回答 2

3

@builder正如您所提到的,这是一个很好的解决方案。导致实体 ID 出现问题的问题的修复方法是->select('model.*')在您的构建器中传递 a。这样,它只会返回您要求的模型的数据,并且仍然按关系排序。

于 2020-01-29T12:59:30.163 回答
1

Just to collect the question and accepted answer into a working example, this is what ended up working for me:

GraphQL:

extend type Query @middleware(checks: ["auth:api"]) {
    jobs(@builder(method: "App\\Models\\Job@jobsInOrder")): [Job!]! @paginate(defaultCount: 10, model: "App\\Job")
}

type Job {
    id: ID!
    description: String!
    job_type: JobType! @belongsTo
}

type JobType {
    id: ID!
    name: String!
}

Job.php:

public function jobsInOrder(Builder $builder): Builder
{

    // Connect the events with their date_times
    return $builder->join('job_types', 'jobs.id', '=', 'job_types.job_id')
        ->select('jobs.*')
        ->orderBy('job_types.name');
}

于 2021-12-01T15:41:39.347 回答