たとえば、いくつかの記事を取得する DQL があります。
$query = $this->getEntityManager()->createQuery('
SELECT a, t, u FROM MyArticleBundle:Article a
LEFT JOIN a.tags t
LEFT JOIN a.author u
WHERE a.id IN (1,2,3)
ORDER BY a.id DESC
');
このデータをオブジェクトとして使用します。
そのような:
$article->getId();
$article->getAuthor();
etc...
しかし、このデータに関係のないデータを結合する必要がある場合があります。
たとえば、データ付きのコメントを取得します。
$query = $this->getEntityManager()->createQuery('
SELECT a, t, u, c FROM MyArticleBundle:Article a
LEFT JOIN a.tags t
LEFT JOIN a.author u
LEFT JOIN MyCommentBundle:Comment c
WITH c.chain_id = a.id AND c.app = :appName
WHERE a.id IN (1,2,3)
ORDER BY a.id DESC
')
->setParameter('appName', 'article');
データを取得できる場合があります。
しかし、プログラム (「$article->getId();」など) は機能しません。
FatalErrorException: エラー: 非オブジェクトに対するメンバー関数 getId() の呼び出し
問題点は「SELECT a, t, u, c」の「c」。
DQLで関係のないコメントをオブジェクトとして選択することはできますか?
プログラムを修正する必要がありますか。
編集:
DB(テーブル)の関係はありません。
他のアプリとは別に管理したいので、コメントテーブルを記事テーブルに関連付けたくない。
ただし、接続 ID は存在します。
上記コードの場合は「chain_id」と「app」です。
そのため、記事の関連コメントを取得できました。
問題は、フェッチするデータが配列であることです。
つまり、上記コードの場合、記事データオブジェクトの子ノードとしてコメントデータを取得したいということです。
のようなデータにアクセスしたい$article->comments
。
これは私が以前に見たコードです。
$this->bind(
array('SomeLog as SomeLogs', array(
'local' => 'id',
'foreign' => 'record_id',
)),
Doctrine_Relation::MANY // means hasMany
);
このコードはdoctrine version 1用
だと思います。関連のないテーブルを強制的に結合するときに使われていると思います。
ドクトリン バージョン 2 に別の方法があることを願っています。