雪崩 / laravel-seeder-reset
在运行之前重置 Laravel 种子文件
0.0.3
2023-08-13 23:38 UTC
Requires
- php: ^8.1
- illuminate/console: ^10.15|^11.0
- illuminate/container: ^10.15|^11.0
- illuminate/contracts: ^10.15|^11.0
- illuminate/filesystem: ^10.15|^11.0
- illuminate/pipeline: ^10.15|^11.0
- illuminate/support: ^10.15|^11.0
- oefenweb/damerau-levenshtein: ^3.0
- php-ai/php-ml: ^0.10.0
Requires (Dev)
- orchestra/testbench: ^8.5.10
- pestphp/pest: ^2.5
- phpstan/phpstan: ^1.10
README
介绍
提示开发者执行种子文件前截断表并删除旧数据。非常适合禁止重复数据的种子项目!
安装
您可以通过 composer 安装此包
composer require snowbuilds/laravel-seeder-reset
用法
在您的种子类中包含 SnowBuilds\SeederReset\Concerns\SeederTruncate
特性。下次运行种子文件时,您将收到截断种子文件的提示。当选择截断时,在运行种子文件之前将截断指定的模型
use SnowBuilds\SeederReset\Concerns\SeederTruncate; use Illuminate\Database\Seeder; class PostSeeder extends Seeder { use SeederTruncate; public $truncate = [ App\Models\User::class, App\Models\Comment::class, App\Models\Post::class, ]; public function run () { // } }
列出要截断的表
当截断属性不足以满足需求时,您可以从 getTruncate
方法返回一个数组
use SnowBuilds\SeederReset\Concerns\SeederTruncate; use Illuminate\Database\Seeder; class PostSeeder extends Seeder { use SeederTruncate; public function getTruncate() { return [ App\Models\User::class, App\Models\Comment::class, App\Models\Post::class, ] }; public function run () { // } }
重置种子文件 - 调用截断
有时您可能有调用其他种子文件的种子文件。如果您只想被提示一次,可以调用截断方法
use SnowBuilds\SeederReset\Concerns\SeederTruncate; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { use SeederTruncate; public function run () { $this->truncate([ UserSeeder::class, RecipeSeeder::class, ]); $this->call([ UserSeeder::class, RecipeSeeder::class, ]); } }
重置种子文件 - 替换调用
如果您想进行更隐晦的操作,可以将 call
方法替换为 reset
方法,该方法将在调用之前重置每个种子文件
use SnowBuilds\SeederReset\Concerns\SeederTruncate; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { use SeederTruncate; public function run () { $this->reset([ UserSeeder::class, RecipeSeeder::class, ]); } }
覆盖种子文件
如果您想保持相同的 API 但想调用其他种子文件,我们建议扩展 SnowBuilds\SeederReset\Seeder
use SnowBuilds\SeederReset\Concerns\SeederTruncate; use SnowBuilds\SeederReset\Seeder; class DatabaseSeeder extends Seeder { public function run () { $this->call([ UserSeeder::class, RecipeSeeder::class, ]); } }
钩子
有时截断不足以满足需求,在播种前需要删除特定的行。我们包括 beforeTruncate
和 afterTruncate
钩子,可用于删除您想要的任何内容。如果钩子失败,操作将回滚。
重要 由于 MySql 限制,截断操作不在事务中执行。如果钩子失败,截断的表将保持为空。
use SnowBuilds\SeederReset\Concerns\SeederTruncate; use SnowBuilds\SeederReset\Seeder; class DatabaseSeeder extends Seeder { public function beforeTruncate() { User::moderators()->delete(); User::customers()->delete(); } public function run () { $this->call([ UserSeeder::class, RecipeSeeder::class, ]); } }
路线图
- 从模型列表截断表
- 使用表名截断
- 使用查询删除数据
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
贡献
有关详细信息,请参阅 CONTRIBUTING
安全
如果您发现任何与安全相关的问题,请通过电子邮件 dev@snowlaboratory.com 而不是使用问题跟踪器。
行为准则
为了确保 Laravel 社区对所有成员都友好,请查阅并遵守 行为准则。
鸣谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件