在graphql中进行一次简单的query

首先需要定义了一个mutation

以下是我定义Post模型的Type

 'Post',
        'description' => 'A Post',
    ];

    /*
     * Uncomment following line to make the type input object.
     * http://graphql.org/learn/schema/#input-types
     */
    // protected $inputObject = true;

    public function fields()
    {
        return [
            'id'             => [
                'type'        => Type::nonNull(Type::int()),
                'description' => 'The id of the Post',
            ],
            'title'          => [
                'type'        => Type::string(),
                'description' => 'The title of Post',
            ],
            'image_url'      => [
                'type'        => Type::string(),
                'description' => 'The image_url of Post',
            ],
            'description'    => [
                'type'        => Type::string(),
                'description' => 'The description of Post',
            ],
            'body'           => [
                'type'        => Type::string(),
                'description' => 'The body of Post',
            ],

            //counts ...
            'hits'           => [
                'type'        => Type::string(),
                'description' => 'The hits of Post',
            ],
            'count_comments' => [
                'type'        => Type::string(),
                'description' => 'The count comments of Post',
            ],
            'count_tips'     => [
                'type'        => Type::string(),
                'description' => 'The count tips of Post',
            ],
            'count_likes'    => [
                'type'        => Type::string(),
                'description' => 'The count_likes of Post',
            ],
            'count_words'    => [
                'type'        => Type::string(),
                'description' => 'The count_words of Post',
            ],

            'time_ago'       => \App\GraphQL\Field\TimeField::class,

            //relations ...
            'user'           => [
                'type'        => GraphQL::type('User'),
                'description' => 'author of Post',
            ],
            'images'         => [
                'type'        => Type::listOf(GraphQL::type('Image')),
                'args'        => [
                    'limit'  => ['name' => 'limit', 'type' => Type::int()],
                    'offset' => ['name' => 'offset', 'type' => Type::int()],
                ],
                'description' => 'images of Post',
            ],
            'comments'       => [
                'type'        => Type::listOf(GraphQL::type('Comment')),
                'args'        => [
                    'limit'  => ['name' => 'limit', 'type' => Type::int()],
                    'offset' => ['name' => 'offset', 'type' => Type::int()],
                ],
                'description' => 'comments of Post',
            ],
        ];
    }

    public function resolveTitleField($root, $args)
    {
        return empty($root->title) ? str_limit($root->body, 20) : $root->title;
    }

    public function resolveDescriptionField($root, $args)
    {
        $description = !empty($root->description) ? $root->description
        : str_limit(strip_tags($root->body), $limit = 100, $end = '...');
        return str_limit($description);
    }

    public function resolveUserField($root, $args)
    {
        return $root->user;
    }

    public function resolveImagesField($root, $args)
    {
        $qb = $root->images()->orderBy('id', 'desc');

        if (isset($args['offset'])) {
            $qb = $qb->skip($args['offset']);
        }

        $limit = 10;
        if (isset($args['limit'])) {
            $limit = $args['limit'];
        }
        $qb = $qb->take($limit);

        return $qb->get();
    }

    public function resolveCommentsField($root, $args)
    {
        $qb = $root->comments()->orderBy('id', 'desc');

        if (isset($args['offset'])) {
            $qb = $qb->skip($args['offset']);
        }

        $limit = 5;
        if (isset($args['limit'])) {
            $limit = $args['limit'];
        }
        $qb = $qb->take($limit);

        return $qb->get();
    }
}

 每一个被query的 filed都需要进行一个定义这样才能被graphql的正常语句所查询 并返回.

定义好type之后  还需要写好它的resolve函数 可以在type类中如上代码写下一个reslove函数

或者给type定义的数组加入一个resolve元素  并传入一个闭包函数.

这样在query的时候会根据结果返回.

以下查询返回:

query PostsQuery {
  posts(order: INDEX) {
    id
    body
    user {
      id
      name
      avatar
      email
    }
  }


2018-05-11 22-57-57屏幕截图.png

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容