CodeWriteson Bunu yazmamdaki amaç, anlamaya çalışıyorum demişsiniz, "çalışmak" ile ne kastettiğinizi öğrenmek istiyorum. Benim "anlamaya çalışmak" deyince aklıma gelen ->toSql() deyip sorguya bakmak ya da Telescope kullanıp sorguları incelemek, log tutup loglara bakmak, EXPLAIN ANALYZE ile sorguyu incelemek vs... Ben sizi burada yönlendirmeye çalışıyorum, amacım size balığı vermek değil balık tutmayı öğretmek ki kendi balığınızı kendiniz tutasınız.
İki sorguyu en azından paginate yapmadan ->toSql() ile kontrol ederseniz zaten farkı görürsünüz. withCount kullanılan yerlerde basitlik adına fedakarlık yapılıyor ve her bir count ayrı bir select ile alınıyordur. Burada kazancınız programmatik ve anlaşılır bir şekilde sorguyu ortaya çıkarmak oldu, artık anlaması, bakımı ve güncellemesi daha kolay. Kaybettiğiniz ise sorgu sayısındaki artış. Dedim ya işte tartıp karar vermeniz gerekiyor.
Üstteki örnekte B sorgusunu seçtiniz, ben kullanıcı olarak sizin sistemde ekrana veri gelsin diye 30 sn bekledim, veri gelmeden çalışmıyor galiba deyip ekranı kapattım mesela 🙂