- vừa được xem lúc

How to Truncate and then seed all Laravel tables

0 0 24

Người đăng: Lâm Luis

Theo Viblo Asia

1.What is Laravel Seeding and Laravel Migration ?

Laravel Seeding là một class chứa code để tạo ra các dummy data (dữ liệu mẫu) cho database trong quá trình xây dựng ứng dụng

Laravel Migration là một chức năng giống như một control database có tác dụng quản lý cũng như lưu trữ lại cấu trúc của database giúp cho việc sửa đổi database trở lên dễ dàng hơn.

2.Trouble

Trong quá trình phát triển ứng dụng thì việc migrationseeder là hầu như anh em nào cũng trải qua, ví dụ như chúng ta chạy câu lệnh dưới:

php artisan migrate:fresh --seed

Command Line này xóa tất cả các bảng và thực hiện lại tất cả Migration , tiếp đến sẽ seeder lại dữ liệu dummy của Database.

Nhưng có 1 vấn đề xảy ra là khi xóa các table là các bản ghi cũ có thể vẫn còn hoặc bạn không thể xóa chúng đúng cách do các ràng buộc về khóa ngoại. (foreign key constraints)

Nếu Project của bạn hơn 20 table thì làm sao để xử lý chúng ?

3.Solutions

Để xử lý vấn đề trên thì mình sử dụng package sau :

$ composer require doctrine/dbal

Đó là một thư viện phải có nếu bạn muốn thay đổi lại định nghĩa table. Sau khi install thì chúng ta tiến hành theo các bước sau :

  • Tạo 1 Seeder
php artisan make:seeder TruncateAllTables
  • Overwrite code vào file vừa tạo
<?php use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; class TruncateAllTables extends Seeder
{ /** * Run the database seeds. * * @return void */ public function run() { Schema:: disableForeignKeyConstraints(); foreach ($this->getTargetTableNames() as $tableName) { DB:: table($tableName)->truncate(); } Schema:: enableForeignKeyConstraints(); } /** * @return mixed */ private function getTargetTableNames(): array { $excludes = ['migrations']; return array_diff($this->getAllTableNames(), $excludes); } /** * @return array */ private function getAllTableNames(): array { return DB:: connection()->getDoctrineSchemaManager()->listTableNames(); }
} 
  • Register nó với DatabaseSeederclass.
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder
{ /** * Run the database seeds. * * @return void */ public function run() { $this->call(TruncateAllTables::class); }
}
  • Execute Command
php artisan db:seed --class=TruncateAllTables

Database seeding completed successfully.

Hy vọng với cách này có thể giúp anh em giải quyết được vấn đề truncate nhiều table nhưng bị ràng buộc bởi foreign key constraints !

Thân ái chào tậm biệt, quyết thắng !

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

Ví dụ CRUD với Laravel và Vuejs.

1. Cài đặt Laravel. composer create-project --prefer-dist laravel/laravel vuelaravelcrud. .

0 0 141

- vừa được xem lúc

Một số tips khi dùng laravel (Part 1)

1. Show database query in raw SQL format. DB::enableQueryLog(); // Bật tính năng query logging. DB::table('users')->get(); // Chạy truy vấn bạn muốn ghi log.

0 0 69

- vừa được xem lúc

Inertiajs - Xây dựng Single Page App không cần API

Tiêu đề là mình lấy từ trang chủ của https://inertiajs.com/ chứ không phải mình tự nghĩ ra đâu nhé :v. Lâu lâu rồi chưa động tới Laravel (dự án cuối cùng mình code là ở ver 5.8), thế nên một ngày đẹp trời lượn vào đọc docs ver 8.

0 0 227