Trước đây mình có đăng bài viết Hướng dẫn Seed cơ sở dữ liệu trong PHP bằng thư viện Faker. Trong khi nghiên cứu chủ đề này, tôi thấy rằng Laravel cũng sử dụng cùng một thư viện để tạo cơ sở dữ liệu. Vì tôi đã viết một bài về chủ đề này cho PHP, nên tôi quyết định viết một bài về cơ sở dữ liệu seeding trong Laravel. Không giống như PHP thuần túy, Laravel sử dụng luồng riêng của nó để khởi tạo cơ sở dữ liệu
Cơ sở dữ liệu Seeding là gì?
Tạo cơ sở dữ liệu là quá trình lấp đầy các bảng cơ sở dữ liệu của bạn bằng dữ liệu thử nghiệm theo chương trình. Với phương pháp này, người ta có thể chèn hàng nghìn mục nhập giả mạo vào cơ sở dữ liệu trong vòng vài phút. Đó là một cách hiệu quả hơn là làm thủ công. Bạn có thể muốn dữ liệu giả để kiểm tra ứng dụng của mình và tạo cơ sở dữ liệu theo chương trình giúp bạn tiết kiệm rất nhiều thời gian
Thư viện giả mạo
Faker là một thư viện nguồn mở tạo dữ liệu giả mạo cho cơ sở dữ liệu của ứng dụng của bạn. Sử dụng Faker, người ta có thể chèn hàng nghìn mục nhập vào cơ sở dữ liệu trong vài phút. Thư viện này tiết kiệm một công việc nhập dữ liệu nhàm chán cho các nhà phát triển. Bạn có thể nhận được hầu hết mọi loại dữ liệu bạn muốn. Thư viện tạo một email giả, tên, số điện thoại di động, từ, câu, đoạn văn, số ngẫu nhiên, v.v. Bạn có thể đọc thêm về thư viện trong tài liệu
Về cơ bản, Laravel sử dụng thư viện Faker để tạo cơ sở dữ liệu. Laravel cài đặt thư viện này ở lõi của nó. Bạn không cần phải cài đặt riêng. Tất cả những gì bạn cần làm là làm theo các bước để gieo hạt và bạn đã hoàn tất
Bắt đầu
Để bắt đầu, tôi sẽ tạo một bảng
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }1 với tên, email, số nhận dạng và tiểu sử của cột. Chúng ta sẽ xem quá trình gieo hạt vào bảng đơn. Theo cách tương tự, người ta có thể tạo bao nhiêu bảng tùy thích
Tạo di chuyển cho bảng
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }1 bằng lệnh
php artisan make:migration create_customers_table
Mở tệp di chuyển và thêm các cột vào phương thức
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }3 như hình bên dưới
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }
Chạy lệnh di chuyển sẽ tạo bảng
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }1 trong cơ sở dữ liệu của bạn
php artisan migrate
Tiếp theo, tạo một mô hình
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }5 ánh xạ tới bảng
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }1
php artisan make:model Customer
Tạo cơ sở dữ liệu trong Laravel
Tạo cơ sở dữ liệu trong Laravel yêu cầu bạn thực hiện các bước sau
- viết seeder
- Tạo một nhà máy mô hình
- Chạy máy gieo hạt
Viết Seeder
Nếu bạn nhìn vào hệ thống tập tin của Laravel, bạn sẽ tìm thấy thư mục
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }7. Tất cả các lớp hạt giống được đặt bên trong thư mục này. Lớp gốc có phương thức
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }8 nơi bạn có thể viết logic để chèn dữ liệu vào bảng
Tạo một lớp hạt giống
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }9 bằng lệnh
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }3
Sau khi thực hiện lệnh này, bạn sẽ thấy tệp
php artisan migrate0 được đặt trong thư mục
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }7. Mở tệp này và đến chức năng
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }8, thêm đoạn mã dưới đây
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }7
Ở đây tôi đang gọi nhà máy Khách hàng mà tôi sẽ tạo trong bước tiếp theo. Lưu ý rằng tôi đã chuyển giá trị là 50 cho phương thức
php artisan migrate3. Nó có nghĩa là 50 hàng nên được chèn vào bảng
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }1
Tạo mô hình nhà máy
Đoạn code mình viết trong
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }9 sẽ tìm một nhà máy của Khách hàng để lấy dữ liệu test. Điều đó có nghĩa là chúng ta phải tạo ra một nhà máy kiểu mẫu có tên là
php artisan migrate6. Chạy lệnh dưới đây để tạo mô hình nhà máy
php artisan make:migration create_customers_table2
Lệnh này sẽ tạo một
php artisan migrate7 bên trong thư mục
php artisan migrate8. Mở tệp này, phương pháp
php artisan migrate9 sẽ tạo dữ liệu thử nghiệm như sau
php artisan make:migration create_customers_table6
Mảng trên trả về một tên ngẫu nhiên, email, số có 9 chữ số và văn bản cho tiểu sử
Máy gieo hạt chạy
Chúng tôi đã viết CustomerSeeder và CustomerFactory. Bây giờ hãy chạy CustomerSeeder bằng lệnh bên dưới
php artisan make:migration create_customers_table7
Sau đó, hãy kiểm tra bảng
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }1 của bạn, nó sẽ có 50 mục nhập giả được chèn vào
Lệnh trên chạy một seeder duy nhất mà chúng tôi đã thông qua một cách rõ ràng. Giả sử bạn muốn tạo nhiều seeder và chạy tất cả chúng bằng một lệnh duy nhất. Trong những trường hợp như vậy, bạn nên gọi những người gieo hạt của mình từ
php artisan make:model Customer1 được tìm thấy trong cùng thư mục
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }7
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }1
Người dùng có thể tạo bao nhiêu seeder theo yêu cầu của họ và gọi chúng từ phương thức
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }8 này
Cuối cùng, chạy seeder bằng lệnh bên dưới
public function up[] { Schema::create['customers', function [Blueprint $table] { $table->id[]; $table->string['name']; $table->string['email']; $table->string['identification_number']; $table->text['bio']; $table->timestamps[]; }]; }0
Nó sẽ gọi tất cả các seeder từ phương thức run và thực thi nó
Tôi hy vọng bạn hiểu cơ sở dữ liệu seeding trong Laravel. Điều này sẽ giúp bạn lấp đầy cơ sở dữ liệu với hàng tấn mục để kiểm tra ứng dụng của bạn