Laravel Lighthouse ile Dinamik Olarak Veri Üretmek
Lighthouse'u temelde modellerde CRUD işlemleri yapmak için kullanıyoruz fakat kimi durumlarda kendi özel tiplerimizi belirleyip bunun için mutasyon veya query yazarak bunları doldurabilmekteyiz.
Aşağıda basit bir örneğini verdiğim şekilde özel tip ve bu özel tipin query yapısı gözüküyor. Normalde bu veriyi olduğu gibi aktarmak ve gelen isteğe göre Lighthouse'un bu dizi içinden istediğini almasını bekleyebiliriz. Fakat burada örneğini verdiğim gibi hesaplaması pahalı bir veriyse oluşturmamız gereken.
type Query {
stat: Stat!
}
type Stat {
userCount: Int
expensiveStat: Int
}
<?php
public function __invoke($_, $args)
{
return [
userCount: User::count(),
expensiveStat: calculateExpensiveStat()
]
}
Eğer bu bir model olsaydı model attribute veya modele eklenen bir metod yardımıyla erişim isteğine göre bu veri üretilirdi fakat bizim oluşturdumuz Query handler hangi alanların çekildiği bilgisine sahip değil.
Bunun yerine biz bu hesaplamalar için Closure oluşturabiliriz. Sonuç olarak Lighthouse sadece istenilen alanlarda olan fonksiyonları çalıştıracak ve bizim ekstra pahalı işlemimiz istenilmediği sürece kullanılmayacak.
Aşağıda belirttiğim gibi bir yapı sayesinde istemci expensiveStat
değerini istediği durumda hesaplanacak başka hiç bir durumda hesaplanmayaktır.
<?php
public function __invoke($_, $args)
{
return [
"userCount" => User::count(),
"expensiveStat" => function () {
return calculateExpensiveStat();
}
]
}