vaahidirn/laravel-graphql

使用 Laravel filterQuery 模型定义用于连接过滤的 GraphQL 架构

dev-master 2019-01-16 11:31 UTC

This package is not auto-updated.

Last update: 2024-09-22 03:03:46 UTC


README

使用 Laravel filterQuery 模型定义用于连接过滤的 GraphQL 架构。

安装

composer require vahidirn/laravel-graphql

用法

在模型上使用 FilterQuery 特性

namespace App;
use VahidIrn\FilterQuery\FilterQuery;

class User extends Model
{
  use \VahidIrn\FilterQuery\FilterQueryTrait;
  
  protected $filterQuery = [
    'name' => FilterQuery::String
  ];
}

创建 GraphQL 用户类型

namespace App\GraphQL\Type;

use App\User;
use GraphQL\Type\Definition\Type;
use Folklore\GraphQL\Support\Type as GraphQLType;

class User extends GraphQLType
{
  protected $attributes = [
    'name' => 'User'
  ];
  public function fields() {
    return [
      'id' => [
        'type' => Type::id(),
      ],
      'name' => [
        'type' => Type::string()
      ]
    ]
  }
}

创建 GraphQL UserFilter 类型。UserFilter 字段定义将自动填充 User::$filterQuery 中的字段。

namespace App\GraphQL\Type;

use App\User;
use VahidIrn\GraphQLFilter\Type\FilterType;

class UserFilter extends FilterType
{
  protected $model = User::class;
}

创建 GraphQL 查询类型,以列出使用 User 模型的 filterQuery 设置的用户记录。

namespace App\GraphQL\Type;

use App\User;
use GraphQL;
use GraphQL\Type\Definition\Type;
use Folklore\GraphQL\Support\Query;

class UsersQuery extends Query
{
  protected $attributes = [
    'name' => 'users'
  ];
  public function type() {
    return Type::listOf(GraphQL::type('User'));
  }
  public function args() {
    return [
      'filter' => [
        'type' => GraphQL::type('UserFilter')
      ]
    ];
  }
  public function resolve($root, $args, $context) {
    return User::filter($args['filter'])->orderBy('name')->limit(10)->get();
  }
}

现在,GraphQL 查询可以使用 FilterQuery::String 规则执行搜索。

query Users {
  users (filter: { name_MATCH: 'vahid' }) {
    name
  }
}