bowens-h / laravel-graphql-extend
Folkloreatelier/laravel-graphql 包的功能扩展。
Requires
- php: >=5.5.9
- doctrine/dbal: 2.5.*|2.6.*|2.7.*|2.8.*
- folklore/graphql: ~1.0|~1.1
- illuminate/support: 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*
Requires (Dev)
- phpunit/phpunit: ~4.0|~5.0|~5.7|~6.0|~7.0
This package is auto-updated.
Last update: 2025-02-24 05:50:58 UTC
README
Folkloreatelier/laravel-graphql 包的功能扩展。扩展功能如下:
- 新增 Column 类型文件,用于映射数据表字段,输出的数据可以被 Type 类型文件的 fields 方法使用,主要避免数据表字段的重复定义;
- Type 类型文件的 fields 方法中字段可以根据表字段自动生成;
安装
依赖:
1- 安装 Folkloreatelier/laravel-graphql 包
2- composer.json
添加包
{ "require": { "bowens-h/laravel-graphql-extent": "~1.0.0" } }
3- 进行 composer 安装
composer install
Laravel >= 5.5.x
1- 发布配置文件
$ php artisan vendor:publish --provider="BowensH\LaravelGraphQLExtend\ServiceProvider"
2- 查看配置文件
config/graphql_extend.php
Laravel <= 5.4.x
1- 向 config/app.php
文件添加服务提供者
BowensH\LaravelGraphQLExtend\ServiceProvider::class,
2- 发布配置文件
$ php artisan vendor:publish --provider="BowensH\LaravelGraphQLExtend\ServiceProvider"
3- 查看配置文件
config/graphql_extend.php
命令
创建 Column 类型文件
php artisan make:graphql:column TestColumn --table=test --force
如果某表字段为 json 类型,则该字段的 type 属性 命令默认生成为空数组([]),需要自己手动写入对应键值,如果是数组,请用中括号包裹。例如
public function columns() { return [ 'test' => [ 'name' => [ 'type' => Type::string(), 'description' => '类型', ] ], 'description' => '测试', ]; }
public function columns() { return [ 'test' => [ [//数组类型 'name' => [ 'type' => Type::string(), 'description' => '类型', ] ] ], 'description' => '测试', ]; }
Type 类型文件生成命令
在 folklore/graphql 包的原命令基础上,增加了 「--table=」 参数,可以根据表生成对应字段,当 Type 类型文件中的字段不需要复用时,可以使用这个命令快速根据表生成字段。
php artisan make:graphql:type TestType --table=test --force
用法
配置
- type_map: 数据表字段类型与 GraphQL 的类型映射。
doctrine/dbal 包自动识别 mysql 中的 TinyInt 类型为 Boolean,因此该类型对应 graphql 类型为 Type::boolean()。
Column
Column 类最后输出的结果,专用于 Type 类型的 fields 方法中。
make
根据 TestColumn 生成 Column 实例,第一个参数为通过 make:graphql:column 生成的 Column 类型文件,当该 Column 被用于包含 InputObject 属性的 Type 类型文件中,第二个参数则需为 true(默认 false)。只有当调用 Column::make 后才可以使用其他方法。
Column::make(TestColumn::class, true);
append
新增字段。
Column::make(TestColumn::class) ->append([ 'test' => [ 'type' => Type:int(), 'description' => '描述' ] ]);
only
只保留 TestColumn 中的 id 字段。
//支持字符串与数组 Column::make(TestColumn::class, true)->only(['id']) Column::make(TestColumn::class, true)->only('id')
except
排除 TestColumn 中的 id 字段。
//支持字符串与数组 Column::make(TestColumn::class, true)->except(['id']) Column::make(TestColumn::class, true)->except('id')
nonNull
将 TestColumn 中的 某些字段设置为 Type::nonNull。
//支持字符串与数组 Column::make(TestColumn::class, true)->nonNull(['title']) Column::make(TestColumn::class, true)->nonNull('title')
result
输出最终结果。
<?php namespace App\GraphQL\Type\Clothes; use App\GraphQL\Columns\TestColumn; use BowensH\LaravelGraphQLExtend\Column; use Folklore\GraphQL\Support\Type as BaseType; class TestType extends BaseType { protected $inputObject = true; protected $attributes = [ 'name' => 'TestType', 'description' => '测试' ]; public function fields() { return Column::make(TestColumn::class, true) // 根据 ClothesColumn 生成 Column 实例 ->nonNull(['title']) // 可选,配置 title 字段为 nonNull ->except(['id']) // 可选,排除 id 字段 ->result(); // 返回最终结果 } }