Merhaba dostlarım iki gün önce Eloquent kaynak kodlarına bakarken exists adına bir method gördüm. Ne iş yaptığına bakarken Model üzerinde verdiğimiz şartı sağlayan bir veri var mı bakmamıza yaradığını gördüm.
Yani bakiye alanı 1000 üzerinde olan kullanıcı var mı bakarken genelde şöyle bir if yazıyoruz:
User::where('balance', '>' 1000)->count() > 0;
#SQL Query: select count(*) as aggregate from `users` where `balance` > ? and `users`.`deleted_at` is null
# Bunun yerine aşağıdaki gibi yazabiliriz
User::where('balance', '>' 1000)->exists();
#SQL Query: select exists(select * from `users` where `balance` > ? and `users`.`deleted_at` is null) as `exists`
Olumsuz şartını yazarken de:
User::where('balance', '>' 1000)->count() === 0;
#SQL Query: select count(*) as aggregate from `users` where `balance` > ? and `users`.`deleted_at` is null
# Bunun yerine aşağıdaki gibi yazabiliriz
User::where('balance', '>' 1000)->doesntExist();
#SQL Query: select exists(select * from `users` where `balance` > ? and `users`.`deleted_at` is null) as `exists`
10 kere 1000 sorgu ile test yaptığımda count yerine exists kullandığımızda ortalama 19 saniye hızlı olduğunu gördüm.
Belki bir işinize yarar 🙂.
Saygılarımla.