Tutorial del esquema
Tutorial del esquemaLección 2: Consultando datos dinámicos

Lección 2: Consultando datos dinámicos

Gato GraphQL puede ampliar aún más las capacidades de WordPress para buscar datos mediante el uso de campos "función" (un tipo distinto de campo que proporciona funcionalidad en lugar de datos), permitiéndonos calcular dinámicamente datos, pasarlos de vuelta como entrada a la consulta, y afectar a la respuesta con un control granular.

Ejemplos

Gato GraphQL proporciona campos de función bajo el concepto de Funcionalidades personalizadas para el esquema: Campos que son accesibles bajo todos los tipos del esquema GraphQL. (Los campos normales en GraphQL, en cambio, son accesibles solo bajo algún tipo específico, como Post o User).

Por convención, los campos globales en Gato GraphQL empiezan con _ (y los campos normales no).

La extensión PHP Functions via Schema proporciona muchas de las funciones PHP más comunes como campos globales, incluyendo:

  • _arrayItem
  • _arrayJoin
  • _date
  • _equals
  • _inArray
  • _intAdd
  • _isEmpty
  • _isNull
  • _makeTime
  • _objectProperty
  • _sprintf
  • _strContains
  • _strRegexReplace
  • _strSubstr
  • _time,
  • Y muchas más...

Podemos crear datos generados dinámicamente, y pasarlos como entrada a un filtro para obtener entradas, comentarios, etc.

Esta consulta recupera el número de comentarios añadidos al sitio en las últimas 24 hs, que se calcula como "hora ahora menos 86400 segundos":

query {
  timeNow: _time  
  time24HsAgo: _intSubtract(
    subtract: 86400,
    from: $__timeNow
  )
  date24HsAgo: _date(
    format: "Y-m-d\\TH:i:sO",
    timestamp: $__time24HsAgo
  )  
  commentsAddedInLast24Hs: commentCount(
    filter: {
      dateQuery: {
        after: $__date24HsAgo
      }
    }
  ) 
}

$__timeNow es una variable creada dinámicamente por la extensión Field To Input, que nos permite obtener el valor de un campo y pasarlo como entrada a otro campo en esa misma operación.

El campo del que obtener el valor se referencia usando la sintaxis de "Variable" $, y __ antes del alias o nombre del campo:

{
  posts {
    excerpt
 
    # Referencing previous field with name "excerpt"
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
 
    # Referencing previous field with alias "isEmptyExcerpt"
    isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
  }
}

Esta consulta recupera el número de comentarios añadidos al sitio empezando desde "hace 24 horas", "hace 1 año", "comienzo del mes", y "comienzo del año":

query {
  timeNow: _time  
  time24HsAgo: _intSubtract(subtract: 86400, from: $__timeNow)
  date24HsAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time24HsAgo)  
  time1YearAgo: _intSubtract(subtract: 31536000, from: $__timeNow)
  date1YearAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time1YearAgo)
  timeBegOfThisMonth: _makeTime(hour: 0, minute: 0, second: 0, day: 1)
  dateBegOfThisMonth: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisMonth)
  timeBegOfThisYear: _makeTime(hour: 0, minute: 0, second: 0, month: 1, day: 1)
  dateBegOfThisYear: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisYear)
  
  commentsAddedInLast24Hs: commentCount(filter: { dateQuery: { after: $__date24HsAgo } } )  
  commentsAddedInLast1Year: commentCount(filter: { dateQuery: { after: $__date1YearAgo } } )  
  commentsAddedSinceBegOfThisMonth: commentCount(filter: { dateQuery: { after: $__dateBegOfThisMonth } } )  
  commentsAddedSinceBegOfThisYear: commentCount(filter: { dateQuery: { after: $__dateBegOfThisYear } } )
}

Esta consulta es la misma que la anterior, sin embargo recupera el formato de tiempo estandarizado "Y-m-d\\TH:i:sO" desde la constante PHP DATE_ISO8601:

query {
  # This PHP constant will provide standard time format "Y-m-d\\TH:i:sO"
  DATE_ISO8601: _env(name: DATE_ISO8601)
  timeNow: _time  
  time24HsAgo: _intSubtract(
    subtract: 86400,
    from: $__timeNow
  )
  date24HsAgo: _date(
    format: $__DATE_ISO8601,
    timestamp: $__time24HsAgo
  )
}

El campo _env se proporciona mediante la extensión Constantes PHP y Variables de Entorno via Schema.

Mediante la Schema Configuration aplicada y los Ajustes del plugin, podemos configurar qué constantes y variables de entorno pueden ser consultadas.