此软件包最新版本(0.2.2)没有提供许可信息。

简单的orm,具有类生成功能。

0.2.2 2022-04-01 20:34 UTC

This package is auto-updated.

Last update: 2024-08-30 01:28:58 UTC


README

orm层易于使用,具有可定制的类生成。

安装

composer require simple-as-fuck/orm

使用mysql作为composer命令的生成器

将配置添加到您的composer.json extra部分(https://composer.php.ac.cn/doc/04-schema.md#extra)。

所有配置键在Defaults\Config中都有注释,可以在composer extra中更改。

{
    "extra": {
        "orm-generator-config": {
            "mysql-host": "127.0.0.1",
            "mysql-port": 3306,
            "mysql-username": "root",
            "mysql-password": "",
            "mysql-database-name": "database"
        }
    }
}

将命令添加到您的composer.json脚本中(https://composer.php.ac.cn/doc/articles/scripts.md#writing-custom-commands)。

{
    "scripts": {
        "orm:generate": "SimpleAsFuck\\Orm\\Generator\\Command\\Composer::mysqlGenerate",
        "orm:check": "SimpleAsFuck\\Orm\\Generator\\Command\\Composer::mysqlCheck"
    }
}

准备composer后,您可以运行以下命令

composer orm:generate

生成所有具有主键的数据库表模型和存储库类。默认情况下,模型位于App\Model\Database,存储库位于App\Service\Database命名空间。

composer orm:check

如果您将所有生成的类添加到存储库中,您可以检查生成内容是否与数据库结构保持最新。

composer orm:generate --no-interaction --no-dev

建议避免在存储库中添加生成代码,并在composer安装后运行orm生成,例如,用于生产部署。默认类模板中的 --no-dev 选项从生成代码中删除了一些注释和一些额外的检查(异常),这可以使orm运行得更快。

composer orm:generate -- --i-am-not-stupid

-- --i-am-not-stupid--no-dev 是同义词,因为如果您编写生产部署脚本,了解您在做什么并且不要做愚蠢的事情是很好的 :-)

使用默认生成的类

在成功使用默认模板生成类之后,您可以编写如下代码。

/**
 * you can put some implementation of abstract connection in your DI container
 * than all repository can be loaded from DI
 *
 * @var \SimpleAsFuck\Orm\Database\Abstracts\Connection $connection 
 */
$repository = new \App\Service\Database\SomethingRepository($connection);

$model = new \App\Model\Database\Something('example', 5);

$repository->insert($model);

$autoIncrementPrimaryKey = 1;
$insertedModel = new \App\Model\Database\Something('update_example', 5, $autoIncrementPrimaryKey);

$repository->update($insertedModel);

$insertedModel = $repository->selectByPrimaryKey($autoIncrementPrimaryKey);

$repository->delete($insertedModel);

自定义

使用mysql作为php类使用生成器

如果您想在应用程序中编写自己的类生成命令,主要为了与生成器和应用程序共享配置,请使用类 \SimpleAsFuck\Orm\Generator\Generator

/**
 * abstraction with configuration you can create some adapter for config from your app
 *
 * @var \SimpleAsFuck\Orm\Config\Abstracts\Config $config
 */

/**
 * you can inject custom connection into mysql database
 *
 * @var \SimpleAsFuck\Orm\Database\Mysql\Connection|null $connection
 */

/**
 * you can inject custom directory generator and change what classes will generated
 * by default models and repositories are generated with model-*, repository-* config.
 *
 * @var \SimpleAsFuck\Orm\Generator\Abstracts\DirectoryGenerator|null $directoryGenerator
 */

$generator = \SimpleAsFuck\Orm\Generator\Generator::createMysql($config, $connection, $directoryGenerator);

// same as composer cmd "composer orm:generate"
$generator->generate();
// same as composer cmd "composer orm:check"
$generator->check();
// same as composer cmd "composer orm:generate -- --i-am-not-stupid"
$generator->generate(false);

使用不同数据库类型的生成器

生成器可以从各种来源创建类,因为它使用抽象类 SimpleAsFuck\Orm\Generator\Abstracts\StructureLoader。您可以从任何来源加载数据模型结构并创建任何类。

/**
 * you must inject some structure loader and provide ModelStructure array,
 * for every instance of ModelStructure should be created some class or classes in $directoryGenerator
 * $generator instance will handle file system synchronization 
 *
 * @var \SimpleAsFuck\Orm\Generator\Abstracts\StructureLoader $structureLoader
 */

/**
 * you must inject directory generator with definition
 * which classes will generated based on ModelStructure array
 *
 * @var \SimpleAsFuck\Orm\Generator\Abstracts\DirectoryGenerator $directoryGenerator
 */

$generator = new \SimpleAsFuck\Orm\Generator\Generator($structureLoader, $directoryGenerator);