Rumah >pembangunan bahagian belakang >tutorial php >Cara menjana data dengan mudah dengan Pangkalan Data Seeder dalam Laravel

Cara menjana data dengan mudah dengan Pangkalan Data Seeder dalam Laravel

WBOY
WBOYasal
2024-07-26 04:48:43435semak imbas

How to easily generate data with Database Seeders in Laravel

Apabila membina aplikasi, sama ada kecil, sederhana atau besar. Mempunyai data ujian untuk dimainkan dalam aplikasi adalah tidak dapat dielakkan dan penting.

Jadi mari kita mulakan daripada mudah kepada lanjutan dengan dua senario berbeza.

i. Semua aplikasi atau kebanyakan aplikasi harus mempunyai pengguna. Kadangkala, kami ingin mengklasifikasikan/menag pengguna sebagai Pentadbir atau Pengguna biasa. Jadi mari kita hasilkan seeder mudah dengan 100 pengguna dengan spesifikasi jadual yang tersenarai di bawah:

  • ID, Nama Pertama, Nama Keluarga, E-mel, Kata Laluan
  • Jenis Pengguna: Sama ada Pentadbir atau Pengguna biasa

Jadi begini.

Untuk menyemai ke dalam jadual pengguna, sudah tentu, anda akan mempunyai jadual migrasi pengguna lalai yang dibuat untuk anda oleh Laravel.

Jadi demi demonstrasi ini, penghijrahan jadual anda sepatutnya kelihatan seperti ini:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->string('password');
            $table->enum('user_type', ['user','admin'])->default('user');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Untuk mencipta kelas seeder untuk Jadual Pengguna kami.

php artisan make:seeder UserSeeder

Jadi, untuk mencipta nilai bagi seeder yang baru kami buat, kami perlu menggunakan pakej Faker lalai yang disertakan dengan setiap aplikasi Laravel.

Untuk menjana 100 pengguna sekaligus, kami mula-mula melakukan gelung untuk dan menghantar data palsu/pseudo ke dalam setiap lajur seperti ini:

use Faker\Factory as Faker;

public function run()
{
   $faker = Faker::create();

   for(i = 0; i <= 99; i++)
   {
      User::create([
        'first_name' => $faker->firstName(),
        'last_name' => $faker->lastName(),
        'email' => $faker->email(),
        'password' => bcrypt('hello1234'), // we might want to set this to a value we can easily remember for testing sake
        'user_type' => $faker->randomElement(['admin', 'user'])
      ]);
   }
}

Untuk memasukkan ini ke dalam pangkalan data, kita perlu menjalankan arahan di bawah:

php artisan db:seed --class=UserSeeder

Ini akan mencipta 100 pengguna dan memasukkan mereka ke dalam pangkalan data.

Semudah itu.

Jadi sekarang, kepada penyelesaian yang lebih maju.

Kita perlu mencipta:

  • Meja jabatan dengan 10 jabatan baharu.
  • Kami akan mencipta 100 pengguna baharu.
  • Jadual kakitangan yang akan merujuk jadual pengguna dengan butiran yang sama dan lajur tambahan untuk merujuk jadual jabatan iaitu id_jabatan.

Kita sudah tahu bagaimana rupa jadual pengguna mari kita lihat bagaimana rupa meja kakitangan dan jabatan.

Meja kakitangan

Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });

Meja jabatan:

Schema::create('departments', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

Jadi kami perlu menjalankan migrasi untuk mempunyai jadual ini dalam pangkalan data kami.

Sekarang, untuk kelas UserSeeder, kami akan melaksanakan titik tumpu yang dinyatakan sebelum ini.

  • Meja jabatan dengan 10 jabatan baharu.
$now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j <= 9; $j++){
            Department::create([
                'name' => $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count++;
        }

Dua titik peluru terakhir perlu dilaksanakan bersama

  • Kami akan mencipta 100 pengguna baharu
  • Jadual kakitangan yang akan merujuk jadual pengguna dengan butiran yang sama dan lajur tambahan untuk merujuk jadual jabatan iaitu id_jabatan.
if ($count == 10) { // we need to make sure we have all 10 departments
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i <= 99; $i++) {
                $user = User::create([
                    'first_name' => $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
}

Penjelasan:

  • Kami mencipta 10 jabatan dahulu.

  • Kemudian kami menyediakan kaunter untuk menyemak sama ada kesemua 10 jabatan telah diwujudkan.

  • Jika syarat kaunter adalah benar, kami kemudiannya mencipta 100 pengguna.

  • Untuk setiap 100 pengguna ini, kami perlu merujuk butiran mereka dalam jadual lain yang dipanggil jadual kakitangan.

  • Setiap kakitangan mestilah milik pengguna dan juga mesti tergolong dalam jabatan, jadi untuk melakukan ini, kita perlu mendapatkan semua jabatan yang kita buat sebelum ini dan menyuntiknya ke dalam ruangan jabatan_id secara rawak.

Pelaksanaan UserSeeder penuh

        $now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j <= 9; $j++){
            Department::create([
                'name' => $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count++;
        }

        $faker = Faker::create();
        if ($count == 10) {
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i <= 99; $i++) {
                $user = User::create([
                    'first_name' => $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
        }

Kemudian jalankan:

php artisan make:seeder --class=UserSeeder

Jika anda mempunyai soalan, jangan teragak-agak untuk melepaskannya. Selamat mengekod!

Atas ialah kandungan terperinci Cara menjana data dengan mudah dengan Pangkalan Data Seeder dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Kelas abstrak dalam OOPArtikel seterusnya:Kelas abstrak dalam OOP