Şema eğitimi
Şema eğitimiDers 2: Dinamik Veri Sorgulama

Ders 2: Dinamik Veri Sorgulama

Gato GraphQL, "fonksiyon" alanlarının (veri yerine işlevsellik sağlayan farklı bir alan türü) kullanımı aracılığıyla WordPress'in veri arama yeteneklerini daha da artırabilir; verileri dinamik olarak hesaplamamıza, bunları tekrar sorguya aktarmamıza ve yanıtı ayrıntılı kontrolle etkilememize olanak tanır.

Örnekler

Gato GraphQL, fonksiyon alanlarını Global alanlar kavramı altında sunar: GraphQL şemasındaki tüm türler altında erişilebilen alanlar. (Buna karşın GraphQL'deki normal alanlar yalnızca Post veya User gibi belirli bir tür altında erişilebilir.)

Gato GraphQL'deki global alanlar, kural olarak _ ile başlar (normal alanlar başlamaz).

PHP Functions Via Schema eklentisi, aşağıdakiler dahil en yaygın PHP fonksiyonlarının büyük bir kısmını global alan olarak sağlar:

  • _arrayItem
  • _arrayJoin
  • _date
  • _equals
  • _inArray
  • _intAdd
  • _isEmpty
  • _isNull
  • _makeTime
  • _objectProperty
  • _sprintf
  • _strContains
  • _strRegexReplace
  • _strSubstr
  • _time,
  • Ve çok daha fazlası...

Dinamik olarak oluşturulmuş veriler oluşturabilir ve bunları gönderi, yorum vb. getirmek için bir filtreye aktarabiliriz.

Bu queries, "şimdiki zaman eksi 86400 saniye" olarak hesaplanan son 24 saatte siteye eklenen yorum sayısını getirir:

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, Field to Input eklentisi tarafından dinamik olarak oluşturulan bir değişkendir. Bu eklenti, bir alanın değerini elde etmemize ve aynı operasyon içinde bunu başka bir alana aktarmamıza olanak tanır.

Değeri alınacak alan, "Değişken" sözdizimi olan $ ve alan takma adı ya da adından önce __ kullanılarak referans alınır:

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

Bu queries, "24 saat önce", "1 yıl önce", "ayın başlangıcı" ve "yılın başlangıcı"ndan itibaren siteye eklenen yorum sayısını getirir:

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 } } )
}

Bu queries bir öncekiyle aynıdır; ancak standartlaştırılmış zaman biçimi olan "Y-m-d\\TH:i:sO" değerini PHP sabiti DATE_ISO8601'den alır:

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
  )
}

_env alanı, PHP Constants and Environment Variables via Schema eklentisi aracılığıyla sağlanır.

Uygulanan Schema Configuration ve eklenti Ayarları aracılığıyla, hangi sabitlerin ve ortam değişkenlerinin sorgulanabileceğini yapılandırabiliriz.