PHP Graphql создать фрагмент

У меня есть этот запрос.

query{
    paintInputsUser{
        username,country, views, rol
    }
}

однако мне нужен способ преобразовать эти значения в уникальное поле, поискав в Google, я обнаружил, что лучший подход - использовать фрагмент. я хочу этот:

query{
    ...paintInputsUser
}

но я не мог найти, как создать фрагмент и как добавить его в схему.

Это мой тип PaintInputsUser

<?php

namespace App\GraphQL\Type;
use App\GraphQL\Support\Type;
use GraphQL;
use DB;
use GraphQL\Type\Definition\ObjectType;
use App\Model\Win\Users;

class PaintInputUser extends ObjectType
{

    public function __construct(){
        $config = [
            'name' => 'PaintInputUser',
            'description' => 'Help to know which fields the creation and edition of user are available, and the respective data',
            'fields' => function() {
                return [
                    'username' => [
                        'type' => Type::nonNull(Type::string()),
                    ],
                    'country' => [
                        'type' => Type::listOf(Type::string()),
                        'resolve' => function($person) {
                            $countries = DB::select('select c.country from win_country c inner join win_user_country uc on uc.id_country = c.id_country inner join win_users u on u.id_user = uc.id_user where u.username = ?',[$person->username]);
                            $array = array();
                            foreach($countries as $country){
                                array_push($array,$country->country);
                            }
                            return $array;
                        }
                    ],
                    'cards' => [
                        'type' => Type::listOf(Type::string()),
                        'resolve' => function($person) {
                            $cards = DB::select('select c.card from win_cards c
                            inner join win_user_card_granted ucg on ucg.id_card = c.id_card
                            inner join win_users u on u.id_user = ucg.id_user
                            where u.username = ?',[$person->username]);

                            $array = array();
                            foreach($cards as $card){
                                array_push($array,$card->card);
                            }
                            return $array;

                        }
                    ],
                    'views' => [
                        'type' => Type::listOf(Type::string()),
                        'resolve' => function($person) {
                            $views = DB::select('select vp.view_name from win_views_principal vp
                            inner join win_user_view_granted uvg on uvg.id_view = vp.id_view_principal
                            inner join win_users u on u.id_user = uvg.id_user
                            where u.username = ?',[$person->username]);

                            $array = array();
                            foreach($views as $view){
                                array_push($array,$view->view_name);
                            }
                            return $array;
                        }
                    ],
                    'rol' => [
                        'type' => Type::listOf(Type::string()),
                        'resolve' => function($person) {
                            $roles = DB::select('select r.rolename from win_roles r
                            inner join win_user_role ur on ur.id_role = r.id_role
                            inner join win_users u on u.id_user = ur.id_user
                            where u.username = ?',[$person->username]);

                            $array = array();
                            foreach($roles as $rol){
                                array_push($array,$rol->rolename);
                            }
                            return $array;
                        }
                    ],
                ];
            }
        ];
        parent::__construct($config);
    }
}

Пожалуйста, объясните мне, как реализовать фрагмент, содержащий paintInputsUser.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Фрагменты используются на стороне клиента, а не на стороне сервера. Согласно спецификации:

Fragments allow for the reuse of common repeated selections of fields, reducing duplicated text in the document... Fragments are consumed by using the spread operator (...). All fields selected by the fragment will be added to the query field selection at the same level as the fragment invocation. This happens through multiple levels of fragment spreads.

Таким образом, запрос клиента может включать в себя такой запрос:

query {
    paintInputsUser{
        ...paintInputUserFields
    }
}

fragment paintInputUserFields on PaintInputUser {
  username
  country
  views
  rol
}

Нет ничего особенного, что вам нужно делать на стороне сервера, чтобы включить такое поведение. Все совместимые со спецификацией реализации GraphQL поддерживают фрагменты из коробки.

Оооо, я понял, это хорошее объяснение, спасибо :)

Luis Cardoza Bird 11.10.2018 00:34

Другие вопросы по теме