Doctrine2-タイムスタンプを入力します-デフォルト値

ウルティ

いくつかの理由で、TIMESTAMPフィールドを持つテーブルが必要です。

独自のタイムスタンプタイプ(Doctrine\DBAL\Types\Typeを作成しましたが、正常に機能します。

しかし、データベース構造を更新しようとすると、これが発生しました。

コマンドライン

ede80:~>php app/console doctrine:schema:update --force --complete
Updating database schema...

  [Doctrine\DBAL\Exception\DriverException]
  An exception occurred while executing 'ALTER TABLE MY_TABLE CHANGE DATE_CREATION DATE_CREATION timestamp DEFAULT NULL'

  SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'DATE_CREATION'

SQLクエリ

データベースで次のクエリを実行すると、機能します。

ALTER TABLE MY_TABLE CHANGE DATE_CREATION DATE_CREATION timestamp DEFAULT CURRENT_TIMESTAMP

ORM.YML

しかし、私がそれを変更しようとするとMyTable.orm.yml、次のようになります:

    dateCreation:
        type: timestamp
        nullable: true
        column: DATE_CREATION
        options:
            default: CURRENT_TIMESTAMP

実行されるクエリは

ALTER TABLE MY_TABLE CHANGE DATE_CREATION DATE_CREATION timestamp DEFAULT 'CURRENT_TIMESTAMP'

そしてそれは失敗します。

データベースの構造を最新の状態にできるように、実際のデフォルト値を設定するにはどうすればよいですか?私はすでに設定しようoptions: default0NULLCURRENT_TIMESTAMP00:00:01...

PHP 5.3.3 MySQL 5.1.63

これがタイムスタンプタイプです

convert *()はそれほど良くないと思います。

<?php
namespace CNAMTS\PHPK\CoreBundle\Doctrine\Type;

use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;

/**
 */
class Timestamp extends Type
{
    const TIMESTAMP = 'timestamp';

    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        return $platform->getDoctrineTypeMapping('TIMESTAMP');
    }

    public function convertToPHPValue($value, AbstractPlatform $platform)
    {
        return ($value === null) ? 0 : new \DateTime($value);
    }

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        return ($value === null) ? 0 : $value->format(\DateTime::W3C);
    }

    public function getName()
    {
        return self::TIMESTAMP;
    }
}
ウルティ

これは、テーブルに複数のタイムスタンプフィールドを含めるためのソリューションです。

AppKernel.phpで独自のタイムスタンプタイプを定義して追加する必要があります

public function boot() {
    parent::boot();

    /**
     * SQL type TIMESTAMP
     */
    $em = $this->container->get('doctrine.orm.default_entity_manager');
    Doctrine\DBAL\Types\Type::addType('timestamp', 'My\CoreBundle\Doctrine\Type\Timestamp');
    $em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('TIMESTAMP', 'timestamp');
}

エンティティ定義では、MyEntity.orm.yml

 dateCreation:
        type: timestamp
        nullable: false
        column: DATE_CREATION
        columnDefinition: TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'
    dateModification:
        type: timestamp
        nullable: false
        column: DATE_MODIFICATION
        columnDefinition: TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

そして、エンティティMyEntity.phpに、prePersistがあります:

public function doPrePersist()
{
    $this->dateCreation = new \DateTime();
}

それが私がそれを機能させた方法です:-)あなたの助けのためにすべてThx!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Doctrine2カスケードのデフォルト値

分類Dev

Doctrine2 SELECTクエリでDateTime型のデフォルト値を処理する方法は?

分類Dev

Doctrine2はObjectMultiCheckboxの値をカスタマイズします

分類Dev

Doctrine2:PreFlushフックはタイムアウトします

分類Dev

Doctrine2を使用したJSONタイプフィールドのキー/値のリクエスト

分類Dev

mySQLでタイムスタンプ列のデフォルト値を2タイムスタンプの合計に設定しますか?

分類Dev

永続化する前にフォームデータを変数にバインドします-Symfony2 / Doctrine2

分類Dev

大規模なデータモデルにDoctrine2を使用する

分類Dev

Flask / Jinja2テンプレートを使用してフォームにデータを入力します。入力テキストフィールドはデータを切り捨てています

分類Dev

Neo4jおよびDoctrine2スタイルのラッパー

分類Dev

Doctrine2:Doctrineコレクションに値が存在するかどうかを確認します

分類Dev

注釈を使用してDoctrine2にFULLTEXTインデックスを追加しますか?

分類Dev

doctrine2(スタンドアロン)でデータベースを作成する方法

分類Dev

Doctrine2はステートメントを削除するためにフィルターを適用しますか

分類Dev

Doctrine2双方向manyToMany-未定義のインデックス

分類Dev

Doctrine2クエリビルダー-連想データが正しくハイドレートしない

分類Dev

Doctrine2を使用したエンコードとデコードの強制

分類Dev

Doctrine2クエリビルダーは文字列を引用しません

分類Dev

Doctrine2:ManyToManyが適切なリストを提供していない

分類Dev

Microsoft Azure Webサイトでのzf2、doctrine2の構成

分類Dev

doctrine2複数のデータベースがzf3に接続しますか?

分類Dev

Doctrine2とSymfony2-特定のエンティティにタイプを使用するためのベストプラクティス

分類Dev

2つのforループとifステートメントを使用して既存のデータフレームに新しい列を入力します

分類Dev

Doctrine2クラステーブル継承エンティティID

分類Dev

symfony2とdoctrine2:リストテーブルの名前をビューに表示します

分類Dev

Doctrine2:一連のエンティティの依存関係グラフ

分類Dev

更新後のDoctrine2リフレッシュエンティティ

分類Dev

Doctrine2はコレクション内の現在のアイテムのインデックスを取得します

分類Dev

struts2は、デフォルトのテキストフィールドとドロップダウンにデータを入力し、モデルにバインドします

Related 関連記事

  1. 1

    Doctrine2カスケードのデフォルト値

  2. 2

    Doctrine2 SELECTクエリでDateTime型のデフォルト値を処理する方法は?

  3. 3

    Doctrine2はObjectMultiCheckboxの値をカスタマイズします

  4. 4

    Doctrine2:PreFlushフックはタイムアウトします

  5. 5

    Doctrine2を使用したJSONタイプフィールドのキー/値のリクエスト

  6. 6

    mySQLでタイムスタンプ列のデフォルト値を2タイムスタンプの合計に設定しますか?

  7. 7

    永続化する前にフォームデータを変数にバインドします-Symfony2 / Doctrine2

  8. 8

    大規模なデータモデルにDoctrine2を使用する

  9. 9

    Flask / Jinja2テンプレートを使用してフォームにデータを入力します。入力テキストフィールドはデータを切り捨てています

  10. 10

    Neo4jおよびDoctrine2スタイルのラッパー

  11. 11

    Doctrine2:Doctrineコレクションに値が存在するかどうかを確認します

  12. 12

    注釈を使用してDoctrine2にFULLTEXTインデックスを追加しますか?

  13. 13

    doctrine2(スタンドアロン)でデータベースを作成する方法

  14. 14

    Doctrine2はステートメントを削除するためにフィルターを適用しますか

  15. 15

    Doctrine2双方向manyToMany-未定義のインデックス

  16. 16

    Doctrine2クエリビルダー-連想データが正しくハイドレートしない

  17. 17

    Doctrine2を使用したエンコードとデコードの強制

  18. 18

    Doctrine2クエリビルダーは文字列を引用しません

  19. 19

    Doctrine2:ManyToManyが適切なリストを提供していない

  20. 20

    Microsoft Azure Webサイトでのzf2、doctrine2の構成

  21. 21

    doctrine2複数のデータベースがzf3に接続しますか?

  22. 22

    Doctrine2とSymfony2-特定のエンティティにタイプを使用するためのベストプラクティス

  23. 23

    2つのforループとifステートメントを使用して既存のデータフレームに新しい列を入力します

  24. 24

    Doctrine2クラステーブル継承エンティティID

  25. 25

    symfony2とdoctrine2:リストテーブルの名前をビューに表示します

  26. 26

    Doctrine2:一連のエンティティの依存関係グラフ

  27. 27

    更新後のDoctrine2リフレッシュエンティティ

  28. 28

    Doctrine2はコレクション内の現在のアイテムのインデックスを取得します

  29. 29

    struts2は、デフォルトのテキストフィールドとドロップダウンにデータを入力し、モデルにバインドします

ホットタグ

アーカイブ