Merhabalar, Laravel için oluşturduğum not paylaşımlarına bu yazıyla devam ediyorum. Bu yazı içerisinde pek çok projemde kullanmaya özen gösterdiğim bir özelliği anlatacağım. Paket yazılımların en büyük sorunlarından biri de belki de varsayılan olarak sunulan içeriklerdir. Laravel Migration Kullanımı yazımda detaylı bir şekilde anlatmış olduğum otomatik veri tabanı oluşturma komutlarına ek olarak bu yazıyla beraber tablolarımız oluşturulurken nasıl veri işleyeceğimizi de anlatacağım. Tabi ki Laravel Seeding işlemlerinde dilediğin zamanda veri kaydı yapmanız mümkün.
Laravel Seeding Nedir ?
Laravel içerisinde Seeder sınıfından türetilen yani extend edilen bu sınıflarımız veri işleme noktasında bize kolaylık sağlamaktadır. Mantık olarak veritabanı yapımıza uygun bir şekilde oluşturduğumuz dizileri kullanan Seeder’lar veri tabanı oluşturduğumuzda veya hızlı kayıtlar eklemek istediğimiz birkaç komut yardımı ile dizilerimi veritabanına işlemektedir. Test işlemlerinde ve paket yazılım hizmetlerinde oldukça kolaylık sağlayan Seeder’lar migrationlarımız ile de birlikte çalıştığı için tek komut yardımı ile hem veritabanı inşasını hem de varsayılan kayıtların oluşturulmasını sağlayabilmektedir.
Seeder Oluşturma
Laravel yapısı pek çok işlem için bize kısa yollar sunmaktadır. Seeder oluşturma işlemleri içinde bir komutumuz yer almaktadır. Bunun dışında manuel olarakta tanımlama yapabilirsiniz fakat bu yöntemi tavsiye etmiyorum. Yeni bir seeder oluşturmak için kullanmamız gereken komut “php artisan make:seeder BlogTableSeeder” şeklindedir. Komutumuzu çalıştırdığımızda “database > seeds” yolu içerisinde “BlogTableSeeder” adında bir sınıf oluşmuş olacaktır. Bu dosyamız içeriği şu şekildedir.
<?php
use Illuminate\Database\Seeder;
class BlogSeeder extends Seeder
{
public function run()
{
}
}
Seeder sınıfından türetilen bu sınıfımız içerisinde yer alan “run()” methodu, tetiklenme sırasında yapılmasını istediğimiz işlemleri tanımlamamızı sağlıyor. Elimizde “blog” adında bir tablo olduğunu ve bu tabloda “title, content, tags” isimlerinde column’lar yer aldığını varsayalım. Burada “tags” column’u boş geçilebilir olsun ki size birkaç dipnot verebileyim. Tablomuz içerisinde “created_at, updated_at” alanları da yer alabilir sorun çıkarmayacaktır. Örnek olarak vermiş olduğumuz tablomuza kayıt işlemi yapacak kodu yazalım.
public function run()
{
DB::table('blog')->insert([
[
“title” => “Example 1”,
“content” => “Example article 1”
],
[
“title” => “Example 2”,
“content” => “Example article 2”
],
]);
}
Yukarıda ki kod ile aslında amaçladığımız şeyi tamamlamış olduk bile. Bu Seeder’ın çalışması ile tablomuza 2 kayıt eklenecektir. Burada “tags” column’u tanımlanmamış olması boş geçilebilir olduğu için herhangi bir sorun çıkarmayacaktır. Fakat bir dizi içerisinde tanımlayıp diğerlerinde tanımlamazsak bu hataya neden olacaktır. Çünkü Seeder’lar içerisinde ki diziler eleman sayılarının eşit olmasını gerektirmektedir.
Görüldüğü gibi Seeder’lar oldukça kullanımı basit ve esnek bir yapılardır. Burada “run()” methodu içerisinde çeşitli loglamalar veya alternatifler yapılabilir. Bunları deneme fırsatım olmadığı için net bir şey söylemeyeceğim fakat aklınızda bulunsun ve lazım olduğunda bu tarz esneklikleri tercih edebilme imkanınız olduğunu bilin istiyorum.
İlk Seeder’ımızı oluşturduktan sonra yapmamız gereken bir tek işlem kalıyor oda Laravel ile gelen varsayılan Seeder sınıfı “DatabaseSeeder” içerisine oluşturduğumuz Seeder’e tanımlamak. Bu Seeder’da “database>seeds” yolu içerisinde yer almaktadır ve içeriği şu şekildedir.
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
}
}
Gördüğünüz gibi normal Seeder’lardan bir farkı yok. Burada oluşturduğumuz Seeder’ları “run()” methodu içerisinde tanımlıyoruz. Bunun sebebi ise Laravel varsayılan olarak artisan komutu ile tetiklendiğinde bu Seeder’ın içerisine bakmakta ve onun referans ettiği Seeder’ları çalıştırmaktadır. Artisan komutları içerisinde çalışmasını istediğiniz Seeder’ları sizde belirtebiliyorsunuz. Bu konuya da yazının ilerleyen aşamalarında bahsedeceğim.
Oluşturmuş olduğumuz BlogTableSeeder’ımızı şu şekilde tanımlıyoruz.
public function run()
{
$this->call([
BlogTableSeeder::class,
ServicesTableSeeder::class,
UsersTableSeeder::class,
]);
}
Örneğimizde görüldüğü gibi birden fazla Seeder tanımlaması dizi yardımı ile yapılabilmektedir. Bu işlemi de tamamladığımıza göre artisan komutlarına geçebiliriz.
Artisan Seeder Komutları
- php artisan db:seed
Komutumuz yardımı ile DatabaseSeeder içerisinde tanımlamış olduğumuz bütün Seeder’lar otomatik olarak çalıştırılır ve işlemlerimiz sırası ile gerçekleştirilir.
- php artisan db:seed --class BlogTableSeeder
Özel olarak çalıştırmak istediğimiz Seeder’larımız için kullandığımız bu komut çok işimize yaramaktadır.
- php artisan db:seed –force
Veritabanlarında çeşitli kontrol veya onay işlemlerinden kaçmak için kullandığımız bu komut yardımı ile işlemlerimizi zorlama yolu ile çalıştırmaktayız.
- php artisan migrate --seed
Oluşturmuş olduğumuz Migration’larımız ile birlikte Seeder’larımızın da çalışmasını tetikleyen bu komut yardımı ile hem tablolarımız inşa oluyor hem de inşa işleminden sonra Seeder’larımız yardımı ile verilerimiz işleniyor.
- php artisan migrate:fresh --seed
Veritabanımızı inşa ederken temiz işlem yapmak istiyorsak bu komut aradığımız ilaçtır. Bütün tabloları yeniden oluşturur ve Seeder’larımızı daha sonra işleme alır.
Kısa kısa komutlarımızı açıklamaya çalıştım. Bu komutlara ek olarak farklı birkaç komut daha bulunmaktadır. Bunların içerisinde çok kullanmadığım hızlı bir şekilde “n” sayı kadar veri ekleme işlemi “factory” lerde bulunmaktadır. Bunların detaylarını Laravel dökümanlarında bulabilirsiniz.
Genel olarak çok zor ve karmaşık işlemler olmadığını sizlerde görmüş oldunuz. Burada varsayılanların dışında çıkarak kendi yaratıcılığını kullanarak pek çok avantajlı işlemler oluşturabilirsiniz. Kod yeteneğinize ve hayal gücünüze kalıyor gerisi. Bir yazımızın daha sonuna gelmeyi başardık. Kendime hatırlatma niteliğinde olduğu için elimden geldiği kadar detaylı yazmaya özen gösterdim. Umarım sizlere de faydalı olur. Bir sonraki yazımızda görüşmek üzere sağlıcakla.
Yorum Yap
Mail adresiniz sizinle iletişime geçebilmek amacıyla istenmektedir. Herkese açık bir platformda yayınlanmayacaktır.