benkle/doctrine-adoption-bundle

一组小服务,使 doctrine 继承映射更实用

1.0.1 2016-09-12 12:57 UTC

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