2

2 つの外部キーと日時フィールドの組み合わせを組み合わせた主キーとして使用したいと考えています。

しかし、私は

Catchable Fatal Error: Object of class DateTime could not convert to string in C:\development\xampp\htdocs\happyfaces\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php 行 1337

私がそうするとき。id: trueYML エンティティ宣言からを削除するとすぐに、すべて正常に動作します。

ここで発生する問題は何ですか?日時列を主キーの一部として宣言しないと、データベースで日時が適切に設定されるため、私にはむしろ Symfony2 または Doctrine2 のバグのようです。

誰でも助けたりアドバイスしたりできますか?

4

1 に答える 1

8

それは不可能であり、推奨されません。主キーについては、 や などのプリミティブ データ型に注目しIntegerますString。最も多くの RDMS システムIntegerは、最大のパフォーマンスを得るために主キーとして好まれます。

見てください: http://doctrine-orm.readthedocs.org/en/2.1/tutorials/composite-primary-keys.html

おそらく、新しいDoctrineデータ型を追加することで回避策が機能する可能性があります. 関数を使用しますが、__toString()Doctrine ではプリミティブ データ型のみを使用するように強制されると思います。

class Foo
{
    private $bar = 'test';

    public function __toString()
    {
        return $this->bar;
    }
}

echo new Foo();

あなたのエラーは、一般的に機能がDateTimeない__toString()か、文字列と互換性がないことを意味します。カスタムデータ型を主キーとして使用することをテストしたことはありません。だから、自分で試してみる必要があります。

見てみましょう: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html

別の試みはString、主キーとして使用し、あなたidを設定することです

$entity->setId(new \DateTime()->format('yyyy/mm/dd'));

同様の質問があります: Symfony/Doctrine: DateTime as primary key

于 2013-09-18T14:15:03.727 に答える