数据库填充

未匹配的标注

填充

Seeding 是一个方便的途径进行快速填充,或者把数据放到表中。

创建填充

你可以创建一个填充文件和填充类,用于保存填充信息,并在之后运行。

运行以下命令创建一个 seed :

$ masonite-orm seed User

这将会为你的填充创建一些模板:

from masoniteorm.seeds import Seeder

class UserTableSeeder(Seeder):

    def run(self):
        """Run the database seeds."""
        pass

现在开始,可以开始创建你的填充。

创建你的填充

一个简单的填充可以是创建一个指定的用户用于测试。

from masoniteorm.seeds import Seeder
from models import User

class UserTableSeeder(Seeder):

    def run(self):
        """Run the database seeds."""
        User.create({
            "username": "Joe",
            "email": "joe@masoniteproject.com",
            "password": "secret"
        })

运行填充

方便地运行填充:

$ masonite-orm seed:run User

数据库填充器

工厂

工厂是个简单和方便的方式,进行快速生成大量的数据。你可以把所有工厂放到一个文件中。

创建一个工厂方法

工厂方法是一个使用 Faker 实例的简单的方法。

# config/factories.py

def user_factory(faker):
    return {
        'name': faker.name(),
        'email': faker.email(),
        'password': 'secret'
    }

在这个文件中,可以查看 faker 变量能够使用哪些方法。 Faker

注册工厂

创建完之后,可以在 Factory 类中注册方法:

# config/factories.py
from masoniteorm import Factory
from models import User

def user_factory(faker):
    return {
        'name': faker.name(),
        'email': faker.email(),
        'password': 'secret'
    }

Factory.register(User, user_factory)

命名工厂

如果有需要,也可以命名工厂,在不同的用例使用不同的工厂:

# config/factories.py
from masoniteorm import Factory
from models import User

def user_factory(faker):
    return {
        'name': faker.name(),
        'email': faker.email(),
        'password': 'secret'
    }

def admin_user_factory(faker):
    return {
        'name': faker.name(),
        'email': faker.email(),
        'password': 'secret',
        'is_admin': 1
    }

Factory.register(User, user_factory)
Factory.register(User, admin_user_factory, name="admin_users")

调用工厂

为了使用工厂,可以从建立的工厂中导入 Factory 类。在本例中,是在 config/factories.py 文件:

from config.factories import Factory
from models import User

users = Factory(User, 50).create() #== <masoniteorm.collections.Collection object>
user = Factory(User).create() #== <models.User object>

这将会把这些用户持久化到数据库中。如果你想创建一个模型或者集合 (并不持久化它们),可以使用 make 方法:

from config.factories import Factory
from models import User

users = Factory(User, 50).make() #== <masoniteorm.collections.Collection object>
user = Factory(User).make() #== <models.User object>

再次说明,这并不会把值持久化到数据库。

调用命名的工厂

默认, Masonite 将会使用没有命名的工厂。如果你命名了一些工厂,可以方便地调用它们:

from config.factories import Factory
from models import User

users = Factory(User, 50).create(name="admin_users") #== <masoniteorm.collections.Collection object>

创建之后

可以指定第二个工厂,在模型创建之后运行:

# config/factories.py
from masoniteorm import Factory
from models import User

def user_factory(faker):
    return {
        'name': faker.name(),
        'email': faker.email(),
        'password': 'secret'
    }

def after_users(model, faker):
    model.verified = True

Factory.register(User, user_factory)
Factory.after_creating(User, after_users)

现在,当你创建一个用户时,将会把用户传递到这个 after_creating 方法:

user = factory(User).create()
user.verified #== True

修改工厂的值

在之前创建的工厂中,如果想修改任何值,可以向 create 或者 make 方法传递一个字典:

from config.factories import Factory
from models import User

users = Factory(User, 50).create({'email': 'john@masoniteproject.com'}) #== <masoniteorm.collections.Collection object>

这是个好方法,确保固定的值,用于之后进行测试断言。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/4.0/or...

译文地址:https://learnku.com/docs/masonite/4.0/or...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 查看所有版本


暂无话题~