FluentSeeder

Swift Vapor Swift Package Manager License

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)

自定义 seeds

通过向 Seed 初始化器提供 ModelFactory,您可以自定义模型的初始化方式并覆盖默认的随机数据。 对于关系 seeds,您可以提供查询来过滤在创建关系时包含哪些模型。 对于 SiblingSeed,您可以选择性地提供 leftQueryrightQuery,对于 ParentSeedChildSeed,您可以选择性地提供 parentQuerychildQuery。 如果未提供查询,则从每个 seeded 模型中抽取随机样本,或者根据 seeded 关系的方向迭代所有模型。

贡献

我们非常欢迎您为 FluentSeeder 做出贡献,请查看 CONTRIBUTING 文件以获取更多信息。

许可

FluentSeeder 基于 MIT 许可发布。 有关更多信息,请参见 LICENSE 文件。