質問

私のプロジェクトのためのDoctrineのDBAL部分のみを使用しています。だから私は自分でマッピングを気にかけなければなりません。 Doctrineは、ここで読むことができるように、Doctrineが一般的なPHPタイプにデータベースの種類を除算することを考え出しました[1]。

今私はDoctrineがDBタイプTinyint(4)をブール値にマッピングするという事実に遭遇しました。 MySQLのマニュアルによるとTinyInt(1)のみがBoolean [2]と同じです。私のプロジェクトはMySQLIからDoctrineへ移動するのが好きなレガシー1であるため、ネイティブのDBタイプに固執する必要があります。

私の質問は、DoctrineからネイティブDBタイプを取得する方法ですか?

あなたの助けを持っています。

ステファノ

[1] http:// docs .doctrine-project.org /プロジェクト/ doctrine-dbal / en /最新/リファレンス/ typess.html [2] http://dev.mysql.com/ doc / refman / 5.0 / en / numeric-type-overview.html

役に立ちましたか?

解決

Doctrine Issue Trackerのレポートを開き、理由を理解するのはそのように機能します。答えは簡単です:

Tinyintの長さは、保存できる値のサイズについては何も言わない。いずれの場合は1バイトですが、このオプションを使用する場合に備えて充填ゼロを効果的にします。

Doctrine MySQLは独自のブール型を提供していないため、自分のブールタイプをMySQL TinyInt型にマッピングします。

詳細については、チケットについてもっと読むことができます。

http://www.doctrine-project.org/jira/browse/DBAL-781

他のヒント

レガシーMySQL DBをDoctrineにマッピングする人は、TinyInt(4)

を扱うときに見逃すことが簡単な一般的な問題の解決策を見つけました。

tl; dr

フィールドマッピングにおけるdefault: '1'

に変更する
is_active:
    type: boolean
    options:
        default: true
    nullable: true
.

長いバージョン

レガシーDBには、以下のDB構造がありました。 tinyint(4)is_active

CREATE TABLE IF NOT EXISTS `foo_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
...
  `is_active` tinyint(4) DEFAULT '1',
...
.

次のコマンドを実行した後

php app/console doctrine:mapping:import --force AcmeDemoBundle yml
php app/console doctrine:generate:entities AcmeDemoBundle
.

php app/console doctrine:schema:update --dump-sqlを実行している間 私は

の間に差し控えました
ALTER TABLE foo_table CHANGE is_active is_active TINYINT(1) DEFAULT NULL;
.

既存のDBを修正することはできませんでした(しかし、問題を解決しなかったことで、私はまだこのdiffを得ていました)

YMLマッピングは以下のフィールド定義

を後述しました
is_active:
    type: boolean
    nullable: true
    default: '1'
    column: is_active
.

私は

で試した
is_active:
    columnDefinition: "TINYINT(4)"
    nullable: true
    default: '1'
    column: is_active
.

成功せずに、プログラミングの非常に一般的な規則に続く「コードに問題がない場合は、問題は他のどこかにあります」私は解決策

を見つけました

溶液

is_active:
    type: boolean
    options:
        default: true
    nullable: true
.

今、単にtype: booleanを使用してもTinyInt(4)を正しく認識しています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top