Projelerin test etme veya ön sunum aşamasında içerisinde dolu olması için örnek kayıtlar oluşturan yapıdır.
Öncelikle seed sınıfı için tablomuzu ve modelimiz olması gerekir.
Seeder oluştururken genel olarak kullanılan belirli bir isimlendirme mevcuttur: tabloAdiTableSeeder
Örnek:
PostsTableSeeder
Yeni bir seed oluşturmak için aşağıdaki artisan komutunu kullanmak yeterlidir.
php artisan make:seeder PostsTableSeeder
Oluşturulan Seed’ler database Database/seeder dizininde saklanır.
Oluşturulan seeder’ın run metodu içerisine veritabanına eklemek istenilen girdiler yazılır. Bunun için Laravel ORM ile create fonksiyonunu kullanılır.
ÖRNEK VERİ GİRDİSİ:
public function run() { Post::create([ 'title' => str_random(10), 'content' => str_random(30), 'tag' => str_random(5) . ',' . str_random(5), 'status' => 1 ]); }
Laravelin varsayılan kurulumu ile gelen DatabaseSeeder
sınıfına oluşturduğunuz seeder’ı eklemeniz gerekmektedir.
public function run() { // $this->call(UsersTableSeeder::class); $this->call(PostsTableSeeder::class); }
Yine Artisan üzerinden seeder’ların hepsini çağırıp çalıştırabilirsiniz.
php artisan db:seed
Sadece tek bir sınıfı çağırmak istiyorsanız aşağıdaki özelleştirmeyi yapabilirsiniz.
php artisan db:seed --class=PostsTableSeeder
ÖNEMLİ NOT:
Class PostsTableSeeder does not exist
Hatası alırsanız composer dump-autoload
komutunu çalıştırmayı unutmayınız.
Rastgele Kelimeler ile Örnek Kayıtlar Oluşturma
Laravel ek bir paket kullanılmadığı takdirde örnek kayıtları rastgele karakterler üzerinden yapar. fzaninotto/Faker eklentisi kullandığı zaman laravel bu işlemi rastgele kelimeler üzerinden yapar. Böylece test verileri daha anlamlı ve gerçeğe yakın hale gelir.
Varsayılan Laravel kurulumu içerisinde bu paket mevcuttur.
public function run() { $faker = Faker\Factory::create(); for($i=0; $i<10; $i++) { Post::create([ 'title' => $faker-> sentence(3), 'content' => $faker->paragraph(5), 'tag' => join(',', $faker->words(5)), 'status' => $faker->randomElement($array = array('0','1')) ]); } }
Bu eklentinin Türkçesi de mevcuttur. Örnek verilerinizi Türkçe olarak getirebilirsiniz. Türkçe kullanmak için aşağıdaki özelleştirmeyi yapmanız yeterlidir.
$faker = Faker\Factory::create('tr_TR'); for($i=0; $i<10; $i++) { Post::create([ 'title' => $faker->name, 'content' => $faker->paragraph(5), 'tag' => join(',', $faker->words(5)), 'status' => $faker->randomElement($array = array('0','1')) ]); }
Eklenti paketi için detaylı bilgi: https://github.com/fzaninotto/Faker