12

MySqlTIMESTAMPの代わりにdoctrine を使用する方法を探しています。DATETIME

さらに、デフォルト値としてON UPDATE CURRENT_TIMESTAMPとを設定する必要があります。CURRENT_TIMESTAMP

このすべてのコードを PHP アノテーションに含めて、すべてを 1 か所にまとめられるようにしたいと考えています。

どうやってやるの?

4

8 に答える 8

24

何時間もの検索の後、私は答えを見つけました。これが、エンティティのライフサイクルや WRONG 列タイプよりも満足のいく解決策を探している他の人に役立つことを願っています (aは値TIMESTAMPを格納するだけでなく、特定の動作を持つ特定のタイプであるため)datetime

あなたがする必要があるのは、追加することだけです

 * @ORM\Column(type="datetime", nullable=false)
 * @ORM\Version

注釈に追加すると、Doctrine はTIMESTAMP列を作成しDEFAULT CURRENT_TIMESTAMP、実際のテーブル値を有効な\DateTimeオブジェクトとして返します。

CTOP (元のポスターのクレジット)

于 2014-09-17T10:41:01.247 に答える
4

TIMESTAMPDoctrine で mysql を使用するようなものはありません。ただし、自分で修正しましたが、テストする必要があります。

  • ファイルを作成します。Doctrine\DBAL\Types\TimestampType.php
  • からコードをコピーしTimeType.phpますTimestampType.php
  • コード内で「Time」の名前を「Timestamp」に変更します
  • 新しい定数を作成し、次のタイプマップにタイムスタンプを追加します。Doctrine\DBAL\Types\Type.php
  • 呼び出される関数を作成getTimestampTypeDeclarationSQLするDoctrine\DBAL\Platforms\AbstractPlatform.php
  • そして、その関数で、戻りますTIMESTAMP

yamlエンティティとプロキシを作成するために使用したので、次のように使用しますyaml

type: timestamp

この「修正」/「回避策」を今すぐテストします。知らせます。

于 2012-11-16T09:08:20.910 に答える
3
/**
 * @var \DateTime
 * @ORM\Column(type="datetime", columnDefinition="timestamp default current_timestamp")
 */
protected $createdAt;

/**
 * @var \DateTime
 * @ORM\Column(type="datetime", columnDefinition="timestamp default current_timestamp on update current_timestamp")
 */
protected $updatedAt;
于 2019-07-30T23:17:29.163 に答える
2

@Polichism は適切なロジックを提供しましたが、パッチは受け入れられませんでした。代わりに、ユーザーはカスタム タイプを追加するように指示されました。私はそれを組み合わせて実装しました:

最終バージョンは GitHub で見つけることができます。

注:ファイルが後で削除された場合にリンクが有効なままであることを確認するために、特定のコミットにリンクしました。履歴を使用して、新しいバージョンを確認します。

于 2015-01-04T20:23:05.270 に答える
1
/** @ORM\Column(type="datetime", nullable=false ) */
    protected $created;

これにより、タイムスタンプが作成され、日時オブジェクトが返されます

 public function __construct()
        {
            $this->created = new \DateTime();

        }
于 2015-05-30T13:59:42.683 に答える
0

@ORM\Version は、エンティティごとに 1 つのプロパティに対してのみ機能するため、テーブルに複数のタイムスタンプ フィールドが必要な場合はオプションではありません。

于 2017-03-30T15:14:14.720 に答える