編集2013.02.17:
以下に書いた内容は、もはや真実ではありません。 Doctrineはidフィールドを関連するエンティティに読み込むほど賢明なので、質問に記載されているシナリオではを実行する必要はありません。そのため、プロキシオブジェクトにはすでにidが含まれているため、データベース。以下
古い答え:
ことは可能であるが、それはunadvisedです。
Doctrineは、リレーショナルデータベースのやり方に由来する単なる「アーティファクト」であるため、外部キーに場所がないオブジェクトグラフを形成するという原則に真に従っています。作業。あなたはいつも
関連するエンティティが必要な場合は あなたはフェッチ-参加に関連するエンティティを
(好ましくリポジトリ上)DQLクエリを書き、
- 熱心にロードされるように関連付けを書き換える必要がありますそれはあなたが確信していない、と本当に上記のすべてを避けたい場合は、トンを得るためには2つの方法が(私の知っていること)がある
その上にゲッターを呼び出すことにより、関連エンティティをレイジーロードしましょう彼は関連オブジェクトのIDをロードせずに、リフレクションやシリアライゼーションのようなトリックに頼らずに
オブジェクトを手元に持っていれば、Doctrineが内部的に使用する内部のUnitOfWork
オブジェクトを取得し、 getEntityIdentifier()メソッドを呼び出し、アンロードされたエンティティ(プロキシオブジェクト)を渡します。遅延ロードをトリガーすることなく、IDを返します。あなたは多対一の関係を持っていると仮定すると
は、カテゴリに属する複数の記事で:
$articleId = 1;
$article = $em->find('Article', $articleId);
$categoryId = $em->getUnitOfWork()->getEntityIdentifier($article->getCategory());
が2.2を来て、あなただけの外部キーを選択するために、IDENTITY DQLの機能を使用できるようになり、このように:
SELECT IDENTITY(u.Group) AS group_id FROM User u WHERE u.id = ?0
開発版にはalready committedです。
でも、実際には「正しい」方法の1つに固執してください。
大きな質問 - 私はこれを常に実行しており、毎回アソシエーションに参加することなく外部キー値に直接アクセスする方法を見つけることが大好きです。 – cantera