name field of the hero object is a String{
hero {
name
# Queries can have comments!
friends {
name
}
}
}
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
]
}
}
}
{
human(id: "1000") {
name
height(unit: FOOT)
}
}
{
"data": {
"human": {
"name": "Luke Skywalker",
"height": 5.6430448
}
}
}
{
empireHero: hero(episode: EMPIRE) {
name
}
jediHero: hero(episode: JEDI) {
name
}
}
{
"data": {
"empireHero": {
"name": "Luke Skywalker"
},
"jediHero": {
"name": "R2-D2"
}
}
}
query is the operation typeHeroNameAndFriends is the operation namequery HeroNameAndFriends {
hero {
name
friends {
name
}
}
}
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
]
}
}
}
Episode! would mean the variable is non-null and requiredquery HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}
# separate dictionary:
{
"episode": "JEDI"
}
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
]
}
}
}
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
# separate dictionary:
{
"ep": "JEDI",
"review": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
{
"data": {
"createReview": {
"stars": 5,
"commentary": "This is a great movie!"
}
}
}
type Character {
name: String!
appearsIn: [Episode!]!
}
Character and Episode are object typesname and appearsIn can appear in any query on a CharacterString is a built-in scalar type, just like Int, Float, Boolean and ID[] means "array of"! means "non-nullable"type Starship {
id: ID!
name: String!
length(unit: LengthUnit = METER): Float
}
METER is the default valueenum Episode {
NEWHOPE
EMPIRE
JEDI
}
type Query {
hero(episode: Episode): Character
droid(id: ID!): Droid
}
Example query enabled by this type:
query {
hero {
name
}
droid(id: "2000") {
name
}
}
composer require rebing/graphql-laravel
php artisan vendor:publish --provider="Rebing\GraphQL\GraphQLServiceProvider"
php artisan make:graphql:query ExampleQuery
php artisan make:graphql:type ExampleType
config/graphql.php
'schemas' => [
'default' => [
'query' => [
\App\GraphQL\Queries\ExampleQuery::class,
],
'mutation' => [
\App\GraphQL\Queries\ExampleMutation::class,
],
'types' => [
\App\GraphQL\Queries\ExampleType::class,
\App\GraphQL\Queries\ExampleEnum::class,
],
],
'user' => [
'query' => [
App\GraphQL\Queries\ProfileQuery::class
],
'mutation' => [
],
'types' => [
],
'middleware' => ['auth'],
// Which HTTP methods to support; must be given in UPPERCASE!
'method' => ['GET', 'POST'],
'execution_middleware' => [
\Rebing\GraphQL\Support\ExecutionMiddleware\UnusedVariablesMiddleware::class,
],
],
],