Seeding Yapısı

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