Laravel 9 Factory Kullanarak Test Verileri Nasıl Oluşturulur?

Merhaba arkadaşlar bu yazıda sizlerle birlikte test verileri oluştururken seeder içerisini veriler ile doldurmak yerine laravel faker kullanarak hızlı bir şekilde ve istediğimiz kadar test verisi nasıl oluşturabilirsiniz bundan bahsedeceğim.

Laravel 9 Factory Kullanarak Test Verileri Nasıl Oluşturulur?

Laravel 9 CRUD Uygulaması

Laravel 9 CRUD uygulaması kodlayalım.

Merhaba arkadaşlar bu yazıda sizlerle birlikte test verileri oluştururken laravel factory faker  kullanarak hızlı bir şekilde ve istediğimiz kadar test verisi nasıl oluşturabilirsiniz bundan bahsedeceğim.Adım adım uyguladığınızda konuyu anlayacak ve kendiniz istediğiniz şekilde uygulayabileceksiniz.O halde hemen başlayalım. :)

İlk olarak boş bir proje oluşturuyoruz ve projeyi kod editörümüzde açıp .env dosyasından veritabanı bağlantı bilgilerimize göre boş bir veritabanı oluşturuyoruz.

laravel new factory-example

Aşağıdaki komutları terminal ekranında çalıştırıyoruz.

php artisan make:model Comment

php artisan make:migration create_comments_table

php artisan make:factory CommentFactory 
burada dikkat etmemiz gereken şey Comment model adımız Factory ise test dosyasının adıdır.Örneğin php artisan make:factory CategoryFactory şeklinde yapabilirsiniz.

Eğer laravel factory nedir diye merak ediyorsanız terminal ekranınızdan aşağıdaki komutları girerek ve işlem sonucunda users tablosuna gözattığınızda 20 satır veri oluştuğunu göreceksiniz :) aslında burada yaptığımız şey de bu fakat kendi istediğimiz şekilde özelleştiriyoruz.

php artisan migrate

php artisan tinker

User::factory()->count(20)->create()

Uygulamamıza dönecek olursak Comment modelimiz içerisindeki ayarları yapılandırmamız gerekiyor.İlk olarak use HasFactory; kısmına dikkat çekmek istiyorum.Burayı silersek factory çalışmaz.
Aşağıdaki gibi modelimizin ayarlarını yapıyoruz.

database/factories/CommentFactory.php dosyasını açıp ilk olarak modelimizi çağırmamız gerekiyor.Daha sonra definition kısmının return array içerisini aşağıdaki gibi test verisi oluşturabilecek özelliği ekliyoruz.Örnekte gördüğünüz gibi content alanı içerisinde $this->faker kullanarak oluşturacağımız alan ve özelliği belirtiyoruz.text() ile oluşturmak istediğimiz veri türünü belirtiyoruz.text(500) 500 rakamı yazının karakter uzunluğunu belirtiyoruz.Buraya isterseniz 200-300 de yazabiliriz.Uzunluğu size bağlı.

App/Models/Comment.php
class Comment extends Model
{
    use HasFactory; //--burada factory kullanabileceğimizi belirtiyoruz
    protected $table = 'comments'; //--burası bağlanacağımız tabloyu temsil ediyor
    protected $fillable = ['content']; //--burası veritabanındaki alanlarımıza erişim iznini temsil ediyor
}

Daha sonra migration yani tablomuzu düzenlememiz gerekiyor. database/migrations/ içerisindeki comments tablomuzu açıp aşağıdaki gibi content alanını ekliyoruz.

Schema::create('comments', function (Blueprint $table) {
   $table->id();
   $table->text('content'); //--burada sadece tek bir alan üzerinden işlem yapacağız.
   $table->timestamps();
});

Ve artık oluşturmuş olduğumuz tabloyu veritabanına ekliyoruz.
Terminal ekranımızı açıp aşağıdaki komutları uyguluyoruz.

php artisan migrate:fresh

veya
php artisan migrate:fres //--bu şekilde de kullanabilirsiniz

composer dump-autoload //--yapmış olduğumuz değişiklikleri mixlemiş oluyoruz.Aksi durumda factory çalışmaz, eğer migration da bir değişiklik yapmışsanız bu komutu tinker çalıştırmadan önce çalıştırmalısınız.
php artisan tinker

Comment::factory()->count(10)->create(); //--Modelimizin adını, count() ile sayısını ve create() ile oluşturmasını istiyoruz.10 sayısı örnektir siz istediğiniz sayıyı belirtebilirsiniz.

Sonuç olarak veritabanına elimizi bir sürmeden, tek tek seeder oluşturmadan çok kısa bir şekilde test verileri oluşturmuş olduk.Örnekteki gibi;


laravel factory

Diğer özelliklere bakarak, bu kısımdan dilediğiniz şekilde oluşturabilirsiniz.

public function definition()
    {
        return [
            'paragraph' => $this->faker->paragraph(),
            'title' => $this->faker->title(),
            'user_id' => $this->faker->numberBetween(1,3),
            'content' => $this->faker->text(500), 
            'check_in' => $this->faker->dateTimeBetween('-10 days','now'), 
            'check_out' => $this->faker->dateTimeBetween('now','+ 10 days'), 
            'meta' => [
                        'settings' => [
                            'site_background' => 'white',
                            'site_language' => 'tr',
                        ],
                        'skills' => $this->faker->randomElements(['laravel','php','css','html','js'], mt_rand(1,6)),  
                        'gender' => $this->faker->randomElements(['male','female','other'])
                    ]
        ]; 

    }

Free Laravel Tutorial

You can access Practical Laravel 9 Training Videos through the website.

Go to Course

Follow on Social Media