5

テーブルの 1 つで ENUM 型を使用していますが、Doctrine はあまり好きではありません。だから私は自分の研究を行い、基本的にそれについて話しているこのトピックを見つけました. Doctrine プロジェクトのこの他のドキュメントでは、それと 2 つの可能な解決策についても説明しています。私は最初のものを使用しますが:

  1. このコードはどこに行くべきですか?

    $conn = $em->getConnection();
    $conn->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

  2. これらの値で SELECT を表示したい場合、後で Forms からこれを処理するにはどうすればよいですか?

4

3 に答える 3

7

このドキュメントに関して、次の行を構成に追加する必要があります。

# app/config/config.yml
doctrine:
    dbal:
        connections:
            default:
                // Other connections parameters
                mapping_types:
                    enum: string

フォームの場合、次のようなヘルパーを追加し、getPossibleEnumValuesこれを使用してビルダーの選択肢を埋めます。

$builder->add('enumField', 'choice', array(
    'choices' => $entity->getPossibleEnumValues(),
));
于 2013-08-06T07:58:52.583 に答える
6

列挙型を使用しないでください (多くの理由で、Google またはhere で見つけることができます) が、別のテーブルとの関係の代わりに列挙型を絶対に使用したい場合は、次のように列挙型の動作をエミュレートするのが最善の方法です。

<?php
/** @Entity */
class Article
{
    const STATUS_VISIBLE = 'visible';
    const STATUS_INVISIBLE = 'invisible';

    /** @Column(type="string") */
    private $status;

    public function setStatus($status)
    {
        if (!in_array($status, array(self::STATUS_VISIBLE, self::STATUS_INVISIBLE))) {
            throw new \InvalidArgumentException("Invalid status");
        }
        $this->status = $status;
    }
}
于 2013-08-06T08:00:27.543 に答える
1

新しい教義タイプを作成できます。それに関するドキュメントを参照してください: http://docs.doctrine-project.org/en/2.0.x/cookbook/mysql-enums.html#solution-2-defining-a-type

このタイプを作成したら、doctrine バンドル構成を使用して登録するだけです。

# app/config/config.yml
doctrine:
    dbal:
        types:
            your_enum: YourApp\DBAL\YourEnum

次に、他のタイプと同じようにエンティティで使用できます:)。

于 2014-07-03T15:37:05.537 に答える