Laravel Query Builder İşlemi -5-

Laravel Query Builder İşlemi -5-

Hepinize merhaba dostlarım 😊. Uzun bir sürenin ardından tekrar sizlerle beraberim. Ufak bir yoğunluk ve birtakım sorunlar yüzünden makale yazmaktan kısa bir süre ayrı kalmıştım. Artık bu makalemden sonra nasipse makale günlerimiz pazar günleri olacaktır 😊

Şimdi heyecanınızı bu makaleyi yazarken bile seziyorum. Evet bu makalemizinde Laravel üzerinde Query Builder işlemlerinin 5. serisini inceleyeceğiz 😉. O zaman hiç vakit kaybetmeden hemen bir veri tabanı oluşturalım ve içerisine basit bir personeller tablosu ekleyelim.

şeklinde tablomu oluşturdum ve içerisine de 4 adet kayıt ekledim. Şimdi aklınızdaki sorular şu

Hocam çok heyecanlandık ne yapacağız 😀

Aslında bu sorular öğrenme aşamasında olması gereken ve sizleri başarıya bir adım daha yaklaştıran sorulardır. O halde hiç vakit kaybetmeden hemen başlayalım

1-) WHERE IN KULLANIMI

Eveeeet 😊. Artık konumuza girişimizi yapmış bulunmaktayız dostlar. Başlıktan da anlayacağınız üzere where in kullanımı bizim sorgumuz üzerinde belirttiğimiz herhangi bir kolonda bizim istediğimiz (yani kodda belirttiğimiz) değerler var mı diye analiz yapar. Eğer analiz sonucunda o veriler var ise ekrana verileri bastırır. Eğer analiz sonucunda herhangi bir değer yok ise boş bir dizi (array) döndürür.

Hemen gelin bunun kodunu yazalım. Yalnız kodunu yazmak için şu anlık yani öğrenme aşamasında olduğunuz için bunu routes klasörü altında web.php dosyası içerisinde yazmamız gerekmektedir. O halde sözü daha fazla uzatmadan hemen web.php dosyamızı açalım ve içerisinde kodlarımızı yazalım

Route::get('/', function () {
    $personeller = \Illuminate\Support\Facades\DB::table('personeller')->whereIn("id",[2])->get();
    foreach ($personeller as $personel){
        echo "ID: ".$personel->id." Isim: ".$personel->ad." Soyisim: ".$personel->soyad." Maas: ".$personel->maas."<br>";
   }
});

 şeklinde kodlarımızı yazdık dostlarım. Bu alanda dikkat ettiyseniz whereIn fonksiyonu 2 parametre almış. Buna bakacak olursak yukarıda da değindiğim gibi

  1. Parametre: Hangi kolonda analiz yapacağımızı belirtiyoruz
  2. Parametre: Hangi değerlerin aranmasını istiyoruz (dizi olarak gönderiyoruz)

şeklinde kodumuzu yazdık dostlar. Sayfayı yeniledğimizde bizim karşımıza gelecek olan sonuç

ID: 2 Isim: Yavuz Selim Soyisim: ŞAHİN Maas: 6000

şeklinde olacaktır. Yani id kolonu içerisinde "2" değeri içeren kaydı getirdi. 

Yukarıda biz tek bir değer arattık şu ana kadar. Gelelim bir de çoklu değer aratalım

Route::get('/', function () {
    $personeller = \Illuminate\Support\Facades\DB::table('personeller')->whereIn("id",[2,4])->get();
    foreach ($personeller as $personel){
        echo "ID: ".$personel->id." Isim: ".$personel->ad." Soyisim: ".$personel->soyad." Maas: ".$personel->maas."<br>";
    }
});

şeklinde kodlarımızı yazdık. Dikkat ettiyseniz whereIn fonksiyonunun 2. parametresinde birden fazla değeri (çok da abartmayayım 2 değer gönderdik 😅) dizi içerisinde virgülle ayırarak gönderdik. Gelin bu kodu çalıştıralım ve ekranda neler karşılayacak bizi bir inceleyelim

ID: 2 Isim: Yavuz Selim Soyisim: ŞAHİN Maas: 6000
ID: 4 Isim: Muhammed Fatih Soyisim: BAĞCIVAN Maas: 6000

şeklinde kayıtlarımız geldi. Yani ID kolonu içerisinde 2 ve 4 değeri içeren kayıtlarımız listelendi. WhereIn fonksiyonumuzun kullanımını bu şekilde görmüş olduk dostlar. Şimdi gelelim bir diğer konumuza

2-) WHERE NOT IN KULLANIMI

Eveeet geldik bir diğer konumuza. İsmi bir önceki başlıktaki whereIn kullanımını andırıyor siz de farketmişsinizdir. Buradaki olay aslında birebir aynı kullanımları falan tamamen aynı. Lakin yaptıkları işlemlere bakacak olursak whereIn bizim belirttiğimiz değerler kolon içerisinde var ise getiriyordu ya whereNotIn fonksiyonu ise bizim belirttiğimiz değerler haricinde olanları getirmeye yarıyor. Hemen bunun için de bir örnek yapalım. İlk olarak tek bir değer gönderip bunun dışındaki değerleri getirelim

Route::get('/', function () {
    $personeller = \Illuminate\Support\Facades\DB::table('personeller')->whereNotIn("id",[2])->get();
    foreach ($personeller as $personel){
        echo "ID: ".$personel->id." Isim: ".$personel->ad." Soyisim: ".$personel->soyad." Maas: ".$personel->maas."<br>";
    }
});

şeklinde kodlarımızı yazdık. Kodda aslında dediğimiz şey şu:

Kardeşim bana ID numarası 2 olan kayıt hariç ne varsa getir

şeklinde bir komut verdik. Kodları çalıştırdığımızda ekrana gelecek olan sonuç ise

ID: 1 Isim: Zafer Soyisim: YILDIZ Maas: 7000
ID: 3 Isim: Emrullah Soyisim: TANIMA Maas: 9000
ID: 4 Isim: Muhammed Fatih Soyisim: BAĞCIVAN Maas: 6000

şeklinde olacaktır. Olay tamamen bundan ibaret dostlar çok basit bir kullanımı var 😊

Şimdi gelelim bu whereNotIn fonksiyonunu aynı whereIn konusunda yaptığımız gibi birden fazla değer gönderip o değerler harici verileri çekelim. Hemen kod sayfamızı açalım ve

Route::get('/', function () {
   $personeller = \Illuminate\Support\Facades\DB::table('personeller')->whereNotIn("id",[1,3])->get();
    foreach ($personeller as $personel){
        echo "ID: ".$personel->id." Isim: ".$personel->ad." Soyisim: ".$personel->soyad." Maas: ".$personel->maas."<br>";
    }
});

şeklinde kodumuzu yazalım. Fark etmişsinizdir ayn whereIn fonksiyonunda olduğu gibi whereNotIn fonksiyonunda da 2. parametreyi bir dizi olarak gönderdik ve içerisine birden fazla değer yazdık. Kodumuzu çalıştırdığımızda ise ekranımıza gelecek olan sonuç

ID: 2 Isim: Yavuz Selim Soyisim: ŞAHİN Maas: 6000
ID: 4 Isim: Muhammed Fatih Soyisim: BAĞCIVAN Maas: 6000

şeklinde olacaktır. Yani ID numarası 1 ve 3 olmayan kayıtlar ekranımıza listelenmiş oldu. Gelelim bir diğer konumuza

3-) GROUP BY KULLANIMI

Geldik bir diğer konumuz olan Group By kullanımına 😊. Yoğun verilerle ilgili işlemler yaparken (örneğin grafiksel işlemler olabilir) bu ve bunun gibi durumlarda group by kullanabiliriz. Yani verileri gruplayarak işlemlerimizi artık grafik üzerinde mi yoksa genel bir analiz mi artık nasıl yapmak istiyorsak o şekilde yapabiliriz. Şimdi aklınızda hemen şu soru belirdi

Peki hocam bunu nasıl kullanacağız 😊

hemen sorunuzun cevabına gelelim dostlarım. Öncelikle kodları yazmadan önce config klasörü içerisindeki database.php dosyası içerisine gidip

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => false,   // TRUE İSE FALSE YAPMANIZ GEREKİYOR
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

şeklinde açıklama satırında da olduğu gibi düzenlememizi yapıyoruz. Bu ayarı yaptığımıza göre gelelim kodlama kısmına

Route::get('/', function () {
    // GROUP BY
    $personeller = \Illuminate\Support\Facades\DB::table('personeller')->groupBy("ad","maas")->get();
    dd($personeller);
});

şeklinde kodumuzu yazıyoruz. Burada groupBy fonksiyonu 2 adet paarametre alacak diye bir kaide bir kural yok. Ama genel kullanımlarda (benim sık sık gördüğüm şey) 2 adet parametre giriliyor. Ben burada ismi ve maaş durumuna göre bir gruplandırma yapacağımı söyledim. Kodu çalıştırdığımızda ise ekranımıza gelecek olan çıktı

şeklinde bir sonuç gelecektir. Dikkat ettiyseniz her veri güzel bir şekilde ve gruplanmış olarak karşımıza geldi dostlarım 😊. Gelelim bir diğer konumuza 

4-) HAVING KULLANIMI

Bir diğer konumuza daha girmiş bulunmaktayız dostlar 😊. Having kullanımına bakacak olursak aslında groupBy kullanımının şartlı halidir diyebiliriz. Burada bizim gruplandırma işlemini neye göre, nasıl bir şarta göre yapacağını belirtiyoruz. Hemen kodlama ekranımıza gelip bu kodları yazalım

Route::get('/', function () {
    $personeller = \Illuminate\Support\Facades\DB::table('personeller')->having("maas",">",6000)->get();
    dd($personeller);
});

şeklinde kodlarımızı yazdık dostlarım. Burada dikkaet ettiyseniz having() methodunu kullandık. Bu method 3 adet parametre alıyor. Hemen gelelim bunlara bakalım

  1. Parametre: Hangi kolon üzerinde sorgu yapılacak
  2. Parametre: Karşılaştırma Operatörü (>, < , =)
  3. Parametre: Belirttiğimiz değer

şeklindedir. Ben kodlama kısmında maaş kısmının 6000 den büyük olmasını ve bu sorgununu gruplandırılmasını istedim. Kodlarımızı yazdığımıza göre sonuç çıktısına bakalım

şeklinde maaşı 6000 den büyük olan kayıtları rahatlıkla çekmiş olduk dostlarım 😊. Bütün olay aslında bu ve çok basit. Yapacağınıza inanıyorum dostlar 😊

5-) ORDER BY KULLANIMI

Geldik en sevdiğim ve çoğu sitede olmazsa olmaz bir kullanım olan order by kullanımına 😊. özellikle web sitelerinde karşımıza çıkan Son Eklenen Ürünler kısmı olsun, En Çok İzlenenler kısmı olsun veya biraz daha heyecanlı bir örnek verecek olursak hepimiz online oyunlar oynamışızdır ve biliyoruz bazı zamanlarda en yüksek rekor yapanlar kısmı oluyor ve orada e-sporcuların isminin en yüksekten en düşüğe doğru sıralandığını görüyoruz. İşte bu kısımda order by kullanılıyor dostlarım. Şimdi sizin aklınızda şu sorular belirdi

Hocam çok güzel bir anlatım yaptınız lakin bunu laravelde nasıl kullanacağız ?

Benim de beklediğim soru hemen geldi 😊. O halde hızlı bir şekilde hemen kodlama kısmını açalım ve

Route::get('/', function () {
    $personeller = \Illuminate\Support\Facades\DB::table('personeller')->orderBy("id","asc")->get();
    foreach ($personeller as $personel) {
        echo "ID: " . $personel->id . " Isim: " . $personel->ad . " Soyisim: " . $personel->soyad . " Maas: " . $personel->maas . "<br>";
    }
});

şeklinde kodlarımızı yazalım. Burada dikkatinizi çekeceğim bir yer var o da orderBy() methodunun parametreleri. Hemen inceleyelim bunu

  1. Parametre: Sıralama yapacağımız zaman hangi kolon baz alınarak sıralama yapılacak
  2. Parametre: Sıralama artan mı ("asc"), Yoksa azalan mı ("desc") olacak

şeklinde 2 adet zorunlu parametre belirtiyoruz. Ben kodlama kısmında ID numaraları artan olarak listelenmesini istedim. Hemen kodu çalıştıralım ve ekran çıktısına bakalım

ID: 1 Isim: Zafer Soyisim: YILDIZ Maas: 7000
ID: 2 Isim: Yavuz Selim Soyisim: ŞAHİN Maas: 6000
ID: 3 Isim: Emrullah Soyisim: TANIMA Maas: 9000
ID: 4 Isim: Muhammed Fatih Soyisim: BAĞCIVAN Maas: 6000

şeklinde kayıtlarımız listelenmiş oldu. Şimdi ise bu kayıtların azalan olarak listelemek için kodlama kısmında "asc" olan yeri "desc" yaparsak karşılaşacağımız sonuç

ID: 4 Isim: Muhammed Fatih Soyisim: BAĞCIVAN Maas: 6000
ID: 3 Isim: Emrullah Soyisim: TANIMA Maas: 9000
ID: 2 Isim: Yavuz Selim Soyisim: ŞAHİN Maas: 6000
ID: 1 Isim: Zafer Soyisim: YILDIZ Maas: 7000

şeklinde olacaktır. Bütün işlem bu kadar basit dostlarım. Özellikle SQL veri tabanı üzerinde bu konular ile çalışmışsanız Laravel üzerinde bu işlemleri çok rahat bir şekilde yapabileceksiniz. Gelelim bir diğer konumuza

6-) IN RANDOM ORDER KULLANIMI

Ve geldik dostlarım Query Builder -5- serimizin son konusu olan inRandomOrder() kullanımına. Nedir bu kullanım diye sormaya pek tenezzül etmiyorsunuz çünkü isminden anlaşılıyor fonksiyonun neyden dolayı kullanıldığı. Örnek vermemiz gerekirse bir e-ticaret sistemi düşünün ve bu sistemde bir ürünün detay sayfasına girdiğinizde yan kısımlarda veya alt kısımlarda benzer ürünler diye bir alan çıkar. Sayfa her yenilendiğinde bu alanlar yenilenir sıralaması değişir. İşte bu ve bunun gibi durumlarda inRandomOrder fonksiyonu devreye girer ve kayıtların rastgele bir şekilde gelmesini sağlar. Gelin kodlama kısmında bunun örneğini yapalım dostlar

Route::get('/', function () {
    $personeller = \Illuminate\Support\Facades\DB::table('personeller')->inRandomOrder()->get();
    foreach ($personeller as $personel) {
        echo "ID: " . $personel->id . " Isim: " . $personel->ad . " Soyisim: " . $personel->soyad . " Maas: " . $personel->maas . "<br>";
    }
});

şeklinde kodlarımızı yazdık. Kodları çalıştırdığımızda ekranımıza gelecek olan sonuç

ID: 3 Isim: Emrullah Soyisim: TANIMA Maas: 9000
ID: 4 Isim: Muhammed Fatih Soyisim: BAĞCIVAN Maas: 6000
ID: 2 Isim: Yavuz Selim Soyisim: ŞAHİN Maas: 6000
ID: 1 Isim: Zafer Soyisim: YILDIZ Maas: 7000

şeklinde olacaktır. Tekrar yenilersek sayfamızı

ID: 4 Isim: Muhammed Fatih Soyisim: BAĞCIVAN Maas: 6000
ID: 1 Isim: Zafer Soyisim: YILDIZ Maas: 7000
ID: 2 Isim: Yavuz Selim Soyisim: ŞAHİN Maas: 6000
ID: 3 Isim: Emrullah Soyisim: TANIMA Maas: 9000

şeklinde kayıtlarımız listelenecektir.  Bütün olay bu dostlarım 😊

 

Eveeet dostlarım 😊. Bu yazımda sizlere Laravel Query Builder -5- serimizde database işlemlerini elimden geldiğince dilim döndüğünce anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bir anlatım yapmış isem benimle iletişime geçmekten çekinmeyin 😊. Konu başlarda biraz karmaşık veya zor gelmiş olabilir dostlarım anlıyorum. Öğrenme aşamasında bu gibi durumlarla karşılaşmanız doğaldır. Bu konuda sizlerden yapmanızı istediğim tek şey her yazımın altında da dediğim gibi "İstikrarlı ve Azimli Olmalısınız, Bolca Pratik Yapmalısınız". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır 😊

Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim 😊

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıLaravel Query Builder İşlemi -4-
Sonraki YazıJquery ile Arama Motoru Yapımı
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz