supliu/laravel-graphql

基于Laravel框架的GraphQL

1.0.1 2020-08-04 16:08 UTC

This package is auto-updated.

Last update: 2024-09-20 15:56:25 UTC


README

Laravel GraphQL

Latest Stable Version Total Downloads Latest Unstable Version License

本项目的目标是便于将webonyx/graphql-php与Laravel框架集成

如何安装

使用Composer安装此包

composer require supliu/laravel-graphql

执行Artisan命令进行发布

php artisan vendor:publish --provider="Supliu\LaravelGraphQL\ServiceProvider"

如何使用

您必须创建您的查询突变类,并在config/graphql.php中注册,以便GraphQL可以读取。

'queries' => [
    'detailHero' => \App\GraphQL\Queries\DetailHero::class
],

'mutations' => [
    'updateHero' => \App\GraphQL\Mutations\UpdateHero::class
]

查询

以下是一个查询类的示例,它返回《星球大战》英雄的数据

<?php

namespace App\GraphQL\Queries;

use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
use Supliu\LaravelGraphQL\Query;

class DetailHero extends Query
{
    /**
     * @return array
     */
    protected function args(): array
    {
        return [
            'id' => Type::nonNull(Type::int())
        ];
    }
    
    /**
     * @return Type
     */
    protected function typeResult(): Type
    {
        return new ObjectType([
            'name' => 'HeroQueryResult',
            'fields' => [
                'name' => Type::string()
            ]
        ]);
    }

    /**
     * @return mixed
     */
    protected function resolve($root, $args, $context, $info)
    {
        return Hero::find($args['id']);
    }
}

突变

以下是一个突变类的示例,它返回更新是否成功

<?php

namespace App\GraphQL\Mutations;

use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
use Supliu\LaravelGraphQL\Mutation;

class UpdateHero extends Mutation
{
    protected function typeResult(): Type
    {
        return new ObjectType([
            'name' => 'UpdateHeroResult',
            'fields' => [
                'error' => Type::boolean(),
                'message' => Type::string()
            ]
        ]);
    }

    /**
     * @return array
     */
    protected function args(): array
    {
        return [
            'id' => Type::nonNull(Type::int())
            'name' => Type::nonNull(Type::string())
        ];
    }

    /**
     * @return mixed
     */
    protected function resolve($root, $args, $context, $info)
    {
        Hero::find($args['id'])->update([
          'name' => $args['name']
        ]);
    
        return [
            'error' => false,
            'message' => 'Updated!'
        ];
    }
}

许可证

Laravel GraphQL是一个开源项目,采用MIT许可证