uniben/laravelgraphqlable

快速且简单地为您的Laravel模型和控制器构建原型GraphQL查询和突变。

dev-master 2020-06-18 16:38 UTC

This package is auto-updated.

Last update: 2024-09-19 02:31:03 UTC


README

快速入门指南

只需将GraphQLable特性添加到您的模型或GraphQL宏添加到您的路由中,即可将它们添加到您的模式中。字段会自动映射到GraphQL类型,也可以配置为使用自定义的GraphQL字段映射,适用于模型和路由。

安装

通过Composer

$ composer require uniben/laravelgraphqlable

使用方法

模型、GraphQL类型和控制器

类型

LaravelGraphQLable会自动生成GraphQL类型,通过搜索使用GraphQLQueryableTrait的模型来实现。

只需将GraphQLQueryableTrait特性添加到您的模型,并在/graphql端点查询GraphQL端点。LaravelGraphQLable还附带graphql-playground,您可以在/graphql-playrgound访问它。

您可以使用graphQLQueryablegraphQLMutatablegraphQLRelations方法自定义GraphQL模型类型公开的属性、方法和关系。

公开GraphQL类型的字段
public static function graphQLQueryable() {
    return [
        'id',
        'created_at',
        'updated_at'
    ];
}

注意:您添加到graphQLRelations数组中的关系必须使用GraphQLQueryableTrait

您还可以使用graphQLMutatable声明模型的突变。只需覆盖公开的静态方法并返回一个字符串数组,这些字符串引用应包含在类型突变中的方法。

公开类型突变
public static function graphQLMutatable(): array {
    return [
        'sayHello'
    ]
}

public function sayHello() {
    return $this->name . ' says hello!';
}
公开GraphQL类型的关联
public static function graphQLRelations(): array {
    return [
        'page'
    ];
}

public function page() {
    $this->hasOne(Page::class);
}
更改默认GraphQL类型名称

GraphQL类型使用的默认名称是模型名称的复数形式。

例如

class User {
    use GraphQLQueryableTrait;
}

生成一个名为Users的GraphQL类型。

一个示例GraphQL用户模型查询可能看起来像这样

query { Users { id, name, created_at }}

控制器

您可以在web.php文件或api.php文件中声明特殊的路由,这些路由返回使用GraphQLQueryableTrait的模型。

通过控制器添加查询到GraphQL模式

路由
Route::any('sayHello', 'UsersController@sayHello')->graphQL(App\User::class, 'query');

那发生了什么?

首先,我们使用常规的Laravel方法定义一个路由。

Route::get('sayHello', 'UsersController@sayHello')

然后我们使用GraphQL查询宏,告诉LaravelGraphQLable将此控制器方法(或闭包)添加到我们的GraphQLSchema中

...->graphQL(App\User::class, 'query');

对于第一个参数,我们提供要返回的GraphQL类型的类路径。在上述示例中,我们引用了一个使用GraphQLQueryableTrait的Laravel模型

我们不需要检索模型的类型。只要它使用特性,就会自动完成。

对于第二个参数,我们指定类型应该是查询还是突变。

覆盖控制器类型名称

使用graphQL宏的路由会生成一个默认名称为{controller}{Method}{Type}的GraphQL类型(如果您的控制器名称以单词Controller结尾,则将其删除)

如果您想覆盖为您的类型生成的默认名称,只需将名称宏添加到您的路由中。

->graphQL(...)->name('SayHello');

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

测试

$ composer test

贡献

请参阅contributing.md以获取详细信息和一个待办事项列表。

安全

如果您发现任何与安全相关的问题,请通过电子邮件发送至 ben@blwatson.com,而不是使用问题跟踪器。

致谢

许可协议

许可协议。请参阅许可协议文件以获取更多信息。