Laravel Query Debugging

Çalışan sorgularınızı uygulamalarınızda görmek bir noktada bir ihtiyaç haline gelir, özelliklede uygulamanız giderek büyüyorsa. Bu konuda birkaç metod bulunmakta bu yazıda bunlardan bazılarından bahsedeceğim.

Laravel Debugbar

Laravel debugbar favori paketlerimden biridir ve sorgularınızı debug edebilmeniz için en iyi yollardan biri olduğunu rahatlıkla söyleyebilirim.

Debugbar

Yukarıda gördüğünüz gibi eğer sayfanızda buna benzer 65 query bulunuyorsa birşeyler ters gidiyor demektir. Bu örnekte basit bir n+1 problemi mevcut olduğunu debugbar ile rahatlıkla görebilirsiniz.

toSql

toSql en basit sorgu görüntüleme metodudur.

$orders = Order::with('user')->where('id', 150)->toSql();
dd($orders);

ve bu bize aşağıdaki sonucu verecektir. Eğer amacınız oluşacak basit query ifadelerini görmekse oldukça işimize yarabilir ama active records’la çalışıyorsak bu ve buna benzer yöntemler ihtiyaçlarımızı pek karşılamayacaktır.

"select * from `tblorders` where `id` = ?"

Normalde yukarıdaki ifademiz elequent ile aşağıdaki sonuçları verecektir.

select * from `tblorders` where `id` = '150' limit 1
select * from `tblclients` where `tblclients`.`id` in ('718')

DB::enableQueryLog()

Bu yöntem Debugbar’dan sonra en kullanışlı bulduğum yöntem.

use DB;
...
DB::enableQueryLog();
$orders = Order::with('user')->where('id', 150)->first();
dd(DB::getQueryLog());

Bu ifade bize aşağıdaki gibi bir sonuç verecektir.

array:2 [▼
  0 => array:3 [▼
    "query" => "select * from `tblorders` where `id` = ? limit 1"
    "bindings" => array:1 [▼
      0 => 150
    ]
    "time" => 7.56
  ]
  1 => array:3 [▼
    "query" => "select * from `tblclients` where `tblclients`.`id` in (?)"
    "bindings" => array:1 [▼
      0 => 718
    ]
    "time" => 0.95
  ]
]

Bu sonuçları dilerseniz ekrana yazdırmak yerine log dosyanızada yazdırabiliriniz.