資料庫:填充
概述
Goravel 包含能夠使用 seed struct 向你的資料庫填充數據的功能。 所有填充 struct 都存放在 database/seeders 目錄中。 默認情況下,為你定義了一個 DatabaseSeeder struct。
編寫 Seeders
要生成一個 seeder,執行 make:seeder Artisan 命令。 框架生成的所有 seeder 都將存儲在 database/seeders 目錄中:
./artisan make:seeder UserSeeder默認情況下,seeder struct 具有兩個方法: Signature 和 Run。 Signature 方法設置 seeder 的名稱,而 Run 方法在執行 db:seed Artisan 命令時被觸發。 你可以使用 Run 方法以你希望的任何方式將數據插入資料庫。
為了說明,我們可以通過將數據插入語句添加到 Run 方法自定義 DatabaseSeeder struct。
package seeders
import (
"github.com/goravel/framework/contracts/database/seeder"
"goravel/app/facades"
"goravel/app/models"
)
type DatabaseSeeder struct {
}
// Signature The name and signature of the seeder.
func (s *DatabaseSeeder) Signature() string {
return "DatabaseSeeder"
}
// Run executes the seeder logic.
func (s *DatabaseSeeder) Run() error {
user := models.User{
Name: "goravel",
}
return facades.Orm().Query().Create(&user)
}調用其他 Seeders
在 DatabaseSeeder struct 中,你可以使用 Call 方法來執行額外的 seed structs。 使用 Call 方法允許你將資料庫填充分割成多個文件,以防止單個 seeder struct 變得過於龐大。 Call 方法接受應執行的 seeder structs 陣列:
// Run 執行 seeder 邏輯。
func (s *DatabaseSeeder) Run() error {
return facades.Seeder().Call([]seeder.Seeder{
&UserSeeder{},
})
}框架還提供一個 CallOnce 方法,seeder 只會在 db:seed 命令中執行一次:
// Run 執行 seeder 邏輯。
func (s *DatabaseSeeder) Run() error {
return facades.Seeder().CallOnce([]seeder.Seeder{
&UserSeeder{},
})
}執行 Seeder
你可以執行 db:seed Artisan 命令以填充你的資料庫。 默認情況下,db:seed 命令運行 database/seeders/database_seeder.go 文件,該文件又可以調用其他 seed 類。 不過,你可以使用 --seeder 選項來指定單獨運行的特定 seeder 類:
./artisan db:seedIf you want to execute other seeders when running the db:seed command, you can register the seeder in the bootstrp/app.go::WithSeeders function, if the seeder is generated by the make:seeder command, the framework will automatically register it.
func Boot() contractsfoundation.Application {
return foundation.Setup().
WithSeeders(Seeders).
WithConfig(config.Boot).
Create()
}
./artisan db:seed --seeder=UserSeeder PhotoSeeder // The signature of seeder你也可以使用 migrate:fresh 和 migrate:refresh 命令結合 --seed 選項填充你的資料庫,這將刪除所有表並重新運行所有遷移。 這個命令對於完全重建你的資料庫非常有用。 --seeder 選項可用於指定要運行的特定 seeder:
./artisan migrate:fresh --seed
./artisan migrate:fresh --seed --seeder=UserSeeder
./artisan migrate:refresh --seed
./artisan migrate:refresh --seed --seeder=UserSeeder強制 Seeders 在生產環境中運行
某些填充操作可能會導致你更改或丟失數據。 為了保護你在生產資料庫中執行填充命令,你將在 production 環境中執行 seeder 前被提示確認。 要強制 seeder 在沒有提示的情況下運行,使用 --force 標誌:
./artisan db:seed --force