benkle/ doctrine-adoption-bundle
一组小服务,使 doctrine 继承映射更实用
1.0.1
2016-09-12 12:57 UTC
Requires
- php: >= 5.6
- benkle/doctrine-adoption: 1.0.*
- symfony/config: >=2.8
- symfony/dependency-injection: >=2.8
- symfony/http-kernel: >=2.8
Requires (Dev)
- phpunit/phpunit: ^5.4
This package is not auto-updated.
Last update: 2024-09-14 20:14:49 UTC
README
一组小服务,使 doctrine 继承映射更实用。
安装
步骤 1:下载 Bundle
打开命令行控制台,进入您的项目目录并执行以下命令以下载此 Bundle 的最新稳定版本
$ composer require benkle/doctrine-adoption-bundle
此命令要求您全局安装 Composer,如 Composer 文档中的 安装章节 中所述。
步骤 2:启用 Bundle
然后,通过将其添加到项目 app/AppKernel.php
文件中注册的 Bundle 列表中来启用该 Bundle
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Benkle\DoctrineAdoptionBundle\BenkleDoctrineAdoptionBundle(), ); // ... } // ... }
用法
步骤 1:定义父实体
/** * Class Document * @package AppBundle\Entity * @Entity() * @Table(name="documents") * @InheritanceType("JOINED") * @DiscriminatorColumn(name="type", type="string") * @DiscriminatorMap({"document" = "AppBundle\Entity\Document"}) */ class Document { /** * @Id() * @Column(type="integer") * @GeneratedValue(strategy="AUTO") */ public $id; /** * @Column(type="string") */ public $name; }
我建议您...
- ...使用
JOINED
作为继承类型,因为您可能想在数据库首次创建后添加子项,更新大型表可能会很昂贵。此外,您将避免列名冲突。 - ...至少声明带有父实体的辨别器映射。主要是为了清晰。
步骤 2:定义子实体
/** * Class TextDocument * @package Demo\TextDocumentBundle\Entity * @Entity() * @Table(name="text_documents") */ class TextDocument extends Document { /** * @Column(type="text") */ public $text; }
步骤 3:创建服务定义,以便您的子实体可以被采用
services: demo_text_document_bundle.text_document: class: Demo\TextDocumentBundle\Entity\TextDocument public: false tags: - name: benkle.doctrine.adoption.child of: AppBundle\Entity\Document discriminator: text_document
就像 Twig 扩展一样,您的实体应声明为私有服务。参数很简单
name
:标签名称(必须是benkle.doctrine.adoption.child
)。of
:父类的全名(例如 子类 是)。discriminator
:辨别器列的值。
步骤 4:清除缓存
$ php bin/console cache:clear
步骤 5:创建或更新数据库
$ php bin/console doctrine:schema:create
或
$ php bin/console doctrine:schema:update --force