FluentSeeder 使得填充 Fluent 模型更加容易。 出于测试目的,它可以基于模型的属性名称和类型,使用 RandomFactory 为您的模型创建伪真实的随机数据。
FluentSeeder 可以通过 Swift Package Manager 获取。 要安装,请将以下内容添加到您的 Package.swift 文件中。
let package = Package(
name: "YourProject",
dependencies: [
...
.package(url: "https://github.com/Appsaurus/FluentSeeder", from: "0.1.0"),
],
targets: [
//If just using for test purposes (recommended use case)
.testTarget(name: "YourAppTests", dependencies: ["FluentSeeder", ... ])
//Not recommended but still possible to use to seed your actual app.
.target(name: "YourApp", dependencies: ["FluentSeeder", ... ])
]
)
1. 导入库
import FluentSeeder
2. 实现 Seeder
服务的注册和配置、数据库和迁移可以通过重写 register(services:)
、configure(databases:)
和 configure(migrations:)
分别完成。
public class ExampleSeeder: Seeder{
public typealias Database = SQLiteDatabase
open static func seeds() -> [SeedProtocol]{
return [
//Seed models first
Seed<ExampleModel>(count: 50),
Seed<ExampleSiblingModel>(count: 25),
Seed<ExampleChildModel>(count: 10),
//Then relationships that depend on those models existing
SiblingSeed<ExampleModelSiblingPivot>(count: 10),
//You can seed parents for each child
ParentSeed<ExampleModel, ExampleChildModel>(at: \.optionalParentModelId)
//Or if you prefer to seed the relationship in the other direction (possibly for one-to-many relationship)
ChildSeed<ExampleModel, ExampleChildModel>.init(count: 3, at: \.optionalParentModelId)
]
}
}
3. 将您的 seeder 的迁移添加到数据库
//Don't forget to add your model mirations first
migrations.add(model: ExampleModel.self, database: .sqlite)
migrations.add(model: ExampleSiblingModel.self, database: .sqlite)
migrations.add(model: ExampleChildModel.self, database: .sqlite)
migrations.add(model: ExampleModelSiblingPivot.self, database: .sqlite)
migrations.add(migration: ExampleSeeder.self, database: .sqlite)
通过向 Seed
初始化器提供 ModelFactory
,您可以自定义模型的初始化方式并覆盖默认的随机数据。 对于关系 seeds,您可以提供查询来过滤在创建关系时包含哪些模型。 对于 SiblingSeed
,您可以选择性地提供 leftQuery
和 rightQuery
,对于 ParentSeed
和 ChildSeed
,您可以选择性地提供 parentQuery
和 childQuery
。 如果未提供查询,则从每个 seeded 模型中抽取随机样本,或者根据 seeded 关系的方向迭代所有模型。
我们非常欢迎您为 FluentSeeder 做出贡献,请查看 CONTRIBUTING 文件以获取更多信息。
FluentSeeder 基于 MIT 许可发布。 有关更多信息,请参见 LICENSE 文件。