benmajor/redseed

RedBeanPHP ORM

1.0.1 2020-08-18 09:34 UTC

This package is auto-updated.

Last update: 2024-09-09 20:41:36 UTC


README

RedSeed 是用于 PHP 的流行且出色的 RedBean ORM 的数据库初始化填充工具。

什么是数据库初始化填充?

数据库初始化填充是指在数据库安装时向数据库中填充数据的初始过程。在安装数据库时向数据库提供一组初始数据是这个过程的一部分。当我们想要填充未来要开发的数据时,这特别有用。这通常是一个在应用程序初始设置时执行的自动化过程。这些数据可以是模拟数据,也可以是必要的初始管理员账户等必要数据。

动机

流行的 PHP ORM 支持数据库初始化填充,我在使用 RedBean 的过程中发现自己越来越需要这样做。为使用 RedBean 的应用程序手动创建数据可能很繁琐,通常需要循环和其他冗长的代码技巧才能完成工作。因此,我决定在 RedBean 的优秀插件架构之上进行构建,并与 RB 创建者和开发者讨论后,我们同意应该开始这个项目。我希望这个存储库(以及随之而来的 RedSeed 项目)会随着时间的推移而增长,我当然会推荐任何来自用户的反馈或建议。请使用 Github Issues 提交建议、评论或错误报告。

安装

安装 RedSeed 最简单的方法是使用 Composer

$ composer require benmajor/redseed

通过 Composer 需求项目后,您必须确保将自动加载文件包含在您的项目中

require 'vendor/autoload.php';

或者,您可以下载 src/ 目录的内容,并将所有文件包含在您的项目中。 我们不建议以这种方式安装!

1. 使用方法

RedSeed 为 RedBean 的 R 类添加了一个名为 seed 的新方法。以下是一个示例,演示了如何用定义了几个字段的 10 个 user 实体进行初始化填充

<?php
use RedBeanPHP\R;

require 'vendor/autoload.php';

$users = R::seed('user', 10, [
  'forename' => 'word(3,10)',
  'surname' => 'word(5,15)',
  'email' => 'email()'
]);

这将创建具有 forenamesurnameemail 字段的 10 个 user 实体,并返回包含生成实体的数组。RedSeed 自动向模式中添加一个名为 _seeded 的新字段,用于取消初始化填充表。以下是一个示例,演示了如何取消初始化填充 user

R::unseed('user');

取消初始化填充表将删除使用 seed 函数创建的所有记录,通过分析将 _seeded 属性设置为 1 的记录。为了避免任何数据丢失,不要修改表中其他记录的 _seeded 的值。调用 unseed 将导致从模式中删除 _seeded 列。

2. 函数

RedSeed 包含了一些方便的预定义函数,可以将它们作为 seed 函数最后一个参数的数组值传递(见上面示例)。此外,还可以传递一个返回一些值的 lambda 函数

# Generate 10 user beans, all with the forename property of Ben:
R::seed('user', 10, [
  'forename' => function() { return 'Ben'; } 
]);

如果 lambda 函数返回一个数组,则其返回值将用于实体的 ownXList 属性! 例如

R::seed('user', 10, [
  'forename' => 'word(5,10)',
  'surname' => 'word(10,15)',
  'email' => 'email()',
  'login' => function() {
      return R::seed('login', 2, [
        'ipaddress' => 'ipaddress()',
        'date' => 'datetime()'
      ]);
  }
]);

在上面的示例中,将创建 10 个 user 实体,每个实体都将两个 login 对象分配给其 ownLoginList 属性。

以下是一个表格,列出了 RedSeed 中可用于字段的函数

3. 贡献

我非常欢迎任何关于管理和开发RedSeed的帮助和反馈。关于RedBean GitHub仓库中的讨论(gabordemooij/redbean#837)存在问题,但请使用RedSeed仓库来发布关于该插件的问题和评论。

4. 开发路线图

我计划在未来几周内为RedSeed添加更多方法和功能,目前这个项目是一个概念验证。以下是我计划实现的一些功能的非常粗略的开发路线图:

  • tag() 函数,用于轻松地为bean生成标签
  • password() 使用RedSeed生成密码的方法(目前,这个功能应该通过lambda表达式来实现)。

许可证

版权所有 2020 本·马ajor。

在此特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人免费使用该软件的权利,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,以及允许向软件提供的人进行此类操作,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式(明示或暗示)的保证,包括但不限于适销性、特定用途的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他原因,以及与软件或软件的使用或其他操作相关的任何索赔。