【问题标题】:How to query a third party package trait in Laravel lighthouse如何在 Laravel 灯塔中查询第三方包特征
【发布时间】:2021-12-26 18:32:48
【问题描述】:

我阅读了 Laravel Lighthouse 文档并在网上搜索,但没有找到如何在 Laravel 的第三方包中查询特征。 我正在使用 qirolab/laravel-reactions 包,它具有 reactionSummary() 特征。 我在问如何在灯塔查询中添加这种关系?

type Post {
    id: ID!
    title: String!
    excerpt: String!
    image_url: String!
    slug: String!
    source: Source! @belongsTo
    reactionSummary: ???????
    created_at: DateTime!
    updated_at: DateTime!
}

除了解决我的问题之外,我的问题还有一个目的,即了解 lighthouse 如何使用包或如何将第三方包与 lighthouse 集成?

【问题讨论】:

    标签: laravel graphql laravel-lighthouse


    【解决方案1】:

    你需要在graphql中定义反应模型的模式,在post模式中你需要定义一个反应类型的数组。

    根据模型 (https://github.com/qirolab/laravel-reactions/blob/master/src/Models/Reaction.php),反应 graphql 模式看起来像这样:

    type Reaction {
       reactBy: User! @belongsTo
       type: String
       reactable: Reactable! @morphTo
    }
    

    您的帖子架构将更改为

    type Post {
        id: ID!
        title: String!
        excerpt: String!
        image_url: String!
        slug: String!
        source: Source! @belongsTo
        reactionSummary: [Reaction]
        created_at: DateTime!
        updated_at: DateTime!
    }
    

    从迁移文件https://github.com/qirolab/laravel-reactions/blob/master/migrations/2018_07_10_000000_create_reactions_table.php 可以看出。该反应具有多晶型关系。

    这意味着返回类型可能会根据字段中设置为reactable_type 的模型类型而有所不同。因此,您需要定义自己的 Union 类型。

    Union 是一种抽象类型,它简单地枚举其他对象类型。它们类似于接口,因为它们可以返回不同的类型,但它们不能定义字段。

    来源:https://lighthouse-php.com/5/the-basics/types.html#union

    另见多态关系和联合部分:https://lighthouse-php.com/5/eloquent/polymorphic-relationships.html#one-to-one

    我希望这能为您指明如何进行。

    【讨论】:

    • 嗨@jobnomade 非常感谢您的精彩解释,它帮助我更多地了解灯塔,但不幸的是它没有回答我的问题,因为这样它只返回模型,我在问包中的特征,因为它正在计算并将其返回。否则这样我们就可以制作自己的模型而不需要任何包。我的问题有两个目的,首先了解灯塔如何与包一起工作或如何将包与灯塔集成,其次是解决我的问题。再次非常感谢,这很有帮助。
    • 该特征通过新关系扩展了您的模型,因此在我看来,没有“灯塔”方式来集成包。如果您安装了有问题的包并运行了迁移,则可以创建突变或查询以访问包提供的模型(包含在特征中)中的数据。出于这个原因,您需要在 graphql 中定义正确的模式。可反应包和灯塔不会为您执行此操作。这就是为什么我试图通过一些示例向您解释您需要自己定义可反应模式的原因。
    猜你喜欢
    • 2014-02-27
    • 2019-08-22
    • 2021-08-29
    • 2021-10-02
    • 2021-09-10
    • 2021-11-20
    • 2017-03-10
    • 2017-01-11
    • 2022-08-04
    相关资源
    最近更新 更多