squirrelphp/entities-bundle

Squirrelphp_entities 的 Symfony 集成 - 自动集成现有实体生成的存储库。

v0.13.1 2023-12-01 09:02 UTC

This package is auto-updated.

Last update: 2024-08-31 00:33:19 UTC


README

Build Status Test Coverage PHPStan Packagist Version PHP Version Software License

通过捆绑配置将 squirrelphp_entities 集成到 Symfony 中,还需要 squirrelphp_queries_bundle 作为连接数据库和执行查询的基础。

安装

composer require squirrelphp/entities-bundle

配置

在 Symfony 配置中启用捆绑,将 Squirrel\EntitiesBundle\SquirrelEntitiesBundle 添加到捆绑列表中,并确保启用 Squirrel\QueriesBundle\SquirrelQueriesBundle 并通过 QueriesBundle 配置连接,这是本捆绑的基础。

配置捆绑将查找存储库的目录如下在 Symfony / YAML 中

squirrel_entities:
    directories:
        - '%kernel.project_dir%/src'
        - '%kernel.project_dir%/possibleOtherDirectory'

它将递归遍历这些目录,找到所有实体,生成存储库并为存储库创建服务。如何使用存储库的详细信息可以在底层库的文档中找到 squirrelphp_entities.

覆盖表名和连接名

如果您正在重用来自其他项目的实体,并且只想更改实体的连接名和/或表名,您可以通过配置覆盖它

squirrel_entities:
    connection_names:
        Application\Entity\User: 'postgres_connection'
        Application\Entity\Session: 'sqlite_connection'
    table_names:
        Application\Entity\User: 'differentdatabase.users'
        Application\Entity\Session: 'sessions_table'

如果您想更改连接名和表名进行测试或开发,同时属性值用于生产系统,这也会很有用。只需使用完全限定的实体类名作为键。如果您指定空字符串作为连接名,则使用默认连接(如果通过 QueriesBundle 定义了默认连接)。

实体和存储库的工作流程

此时,您应该已经通过数据库配置了 squirrelphp_queries_bundle

在开发过程中

  1. 按照 squirrelphp_entities 中的说明创建具有属性值的实体
  2. 运行 vendor/bin/squirrel_repositories_generate --source-dir=src 以生成实体的存储库 - 这些将自动忽略 git(根据您的实体位置添加或更改 --source-dir 条目)
  3. 将实体的目录添加到 squirrel_entities 配置中,以便在 Symfony 服务容器编译时自动找到和初始化存储库。
  4. 在您的代码中使用生成的存储库类作为类型提示,并让 Symfony 自动注入这些服务。
  5. vendor/bin/squirrel_repositories_generate --source-dir=src 添加到您的 composer.json 中的 scripts 部分,作为 post-install-cmdpost-update-cmd(这些列表的顶部)。每次您进行安装或更新时,都会重新创建存储库。

在生产环境中

如果在生产中运行 composer install,只需确保您已将 squirrel_repositories_generate 添加到 composer.json 中,如“开发过程中”第 5 点所述,因此每次部署时都会重新创建存储库。

如果您有一些特定的部署工作流程,您可以显式地调用vendor/bin/squirrel_repositories_generate --source-dir=src来生成仓库。只需确保在编译 Symfony 容器(或在执行 cache:clear 或 cache:warmup 清除缓存之前)之前完成此操作,否则将缺少仓库类,并且与仓库类相关的自动装配代码将无法正常工作。