Mehmet AYHAN

Mehmet AYHAN

Yazılım Geliştirici

Laravel Seeding

Laravel Seeding

Yayın Tarihi   | 13870 Görüntülenme

Projelerimizi test etme aşamasında veya sunum aşamasında proje içeriğinin dolu olması sitenin daha iyi anlaşılabilmesini sağlar. Css deki kayma, taşma hatalarını görme kolaylığı sağlayabilir. Bunun için veritabanına örnek kayıtlar eklemek gerekebilir.


Laravel örnek kayıtların eklenmesi için seed sınıflarını sunar.
Öncelikle seed sınıfı için tablomuzu ve modelimiz olması gerekir. Örnek olarak tablo adım: Posts sütunlar ise resimdeki gibidir. Post adıyla da bir modelim mevcuttur.
 
Seeder oluştururken genel olarak kullanılan belirli bir isimlendirme mevcuttur. tabloAdiTableSeeder Örnek: PostsTableSeeder
Yeni bir seeder oluşturmak için;

php artisan make:seeder PostsTableSeeder

Oluşan her seeder,

Database/seeder
klasöründe bulunmaktadır. Oluşturduğumuz seeder’ın run metodu içerisine veritabanına eklemek istediğimiz girdileri yazıyoruz. Laravel ORM ile create fonksiyonunu  oluşturalım.



use App\Post;
use Illuminate\Database\Seeder;

class PostsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Post::create([
            'title' => str_random(10),
            'content' => str_random(30),
            'tag' => str_random(5) . ',' . str_random(5),
            'status' => 1
        ]);
    }
}
Kodumuzu çalıştırmadan önce, laravelin varsayılan kurulumu ile gelen DatabaseSeeder sınıfına oluşturduğumuz seeder’ı eklememiz gerekir. DatabaseSeeder sınıfı oluşturduğumuz seeder sınıfı ile aynı dizindedir.


use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // $this->call(UsersTableSeeder::class);
         $this->call(PostsTableSeeder::class);
    }
}
Oluşturduğumuz seeder sınıflarını call() metoduyla çağırıyoruz.
php artisan db:seed 
komutuyla DatabaseSeeder sınıfını çağırıyoruz. Bu sınıfın run fonksiyonu ile çağırdığımız tüm seederlar çalışacaktır.
Eğer sadece istediğimiz bir sınıfımızı çalıştırmak istersek;


php artisan db:seed --class=PostsTableSeeder

Class PostsTableSeeder does not exist
Hatası alırsanız composer dump-autoload komutunu çalıştırmayı unutmayınız.


Seeder’ımız çalıştığında kaydımız eklendi. Ancak rastgele oluşturulan harflerden oluştuğu için sitemizde çok sağlıklı durmayacaktır. Bunun için  rastgele karakterlerden oluşturmak yerine rastgele kelimeler ile oluşturan fzaninotto/Faker eklentisini kullanacağınız. Projemizde standart olarak yüklü olarak geliyor. Projenizde yüklü değilse eklentinin github sayfası, sayfa sonunda mevcuttur.


use App\Post;
use Illuminate\Database\Seeder;

class PostsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    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'))
            ]);
        }
    }
}

php artisan db:seed
komutunu tekrar çalıştırdığımızda
 
Kayıtlarımızın eklendiğini görüyoruz. Rastgele kelimeler ve daha kapsamlı bir kullanım olduğu için daha hoş bir görüntü ve daha sağlıklı olacaktır. Veritabanında ad soyad, ülke, şehir, renk kayıtlarını tutuyorsanız bu eklentinin Türkçesi de mevcut ve bu sütunları Türkçe olarak getirebilirsiniz. Türkçe kullanmak için,
$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'))
    ]);
}

 
Ancak oluşturulan cümleler, kelimeler yine varsayılan ayarlar ile gelmektedir.
Bu eklenti için daha birçok format mevcuttur. Tarih, saat, şifre, random sayı, adres, cinsiyet, eposta, telefon, , file, bool, regex, useragent gibi formatlarını mevcuttur. Daha detaylı bilgi için eklentinin github sayfası; https://github.com/fzaninotto/Faker