Symfony2 で遊んでいます。
で、Doctrine2.0 でモデルを定義するときに少し困ったことが。
以下のようなモデルを想定しました。
User (id, ..)
Cart (user_id, …)
id, user_id はそれぞれ主キーで、 user_id は 外部キーです。
User は Cart を 1つしか持てないという想定で、1対1の関係です。
アノーテーションを使ってモデルを定義すると、
User側
/** * @orm:Id * @orm:Column (type="integer") * @orm:GeneratedValue (strategy="AUTO") */ protected $id;
Cart側
/** * @orm:Id * @orm:OneToOne (targetEntity="User") * @orm:JoinColumn (name="id", referencedColumnName="id") */ protected $user;
とかなるかなー、っておもって
doctrine:schema:create をやってみたんですが、Cart に主キーがないんだぜ
と怒られてしまいました。
よくよく、ドキュメントを良く読むと衝撃的なあれが。
http://www.doctrine-project.org/docs/orm/2.0/en/tutorials/composite-primary-keys.html
Doctrine 2 supports composite primary keys natively. Composite keys are a very powerful relational database concept and we took good care to make sure Doctrine 2 supports as many of the composite primary key use-cases. For Doctrine 2.0 composite keys of primitive data-types are supported, for Doctrine 2.1 even foreign keys as primary keys are supported.
間違ってるかもしれない、ほんわか翻訳
Doctrine2は最初から複合主キーに対応しています。複合主キーはとても強力なリレーショナルデータベースの概念であり、私たちは念を入れてさまざまなユースケースの複合主キーに対応したいと思います。Doctrine 2.0 ではプリミティブ型の複合主キーに対応され、2.1ではさらに外部キーを主キーとすることにも対応されています。
うほー。ってことは Doctrine2.1 を乗せないと、上のようなモデルを定義することはできないてことかー?