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
Lepaskan: 2024-07-26 04:48:43
asal
445 orang telah melayarinya

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();
        });
    }
Salin selepas log masuk

Untuk mencipta kelas seeder untuk Jadual Pengguna kami.

php artisan make:seeder UserSeeder
Salin selepas log masuk

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'])
      ]);
   }
}
Salin selepas log masuk

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

php artisan db:seed --class=UserSeeder
Salin selepas log masuk

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();
        });
Salin selepas log masuk

Meja jabatan:

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

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++;
        }
Salin selepas log masuk

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
                ]);
            }
}
Salin selepas log masuk

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
                ]);
            }
        }
Salin selepas log masuk

Kemudian jalankan:

php artisan make:seeder --class=UserSeeder
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan