私は現在Symfony2とDoctrine2を使用しており、クエリビルダを使用して2つのテーブルを結合しようとしています。テーブル関係が設定されていない場合、Doctrine2の2つのテーブルをクエリビルダを使用してどのように結合しますか?
問題は、私の注釈付きエンティティにすべてテーブル関係が設定されていないことです。私はある時点でこれに対処しますが、その間に私はこれを試して作業する必要があります。
基本的に私は2つのテーブルを持っています:製品テーブルとproduct_descriptionテーブル。製品テーブルには基本情報が格納されています。次に、説明情報を格納するproduct_descriptionテーブルがあります。製品は言語のために1つ以上の説明を持つことができます。
クエリビルダを使用したいので、productとproduct_descriptionの両方の結果をオブジェクトとして取得できます。私は、次のコードを使用しています現時点では
:
// Get the query builder
$qb = $em->createQueryBuilder();
// Build the query
$qb->select(array('p, pd'));
$qb->from('MyCompanyMyBundle:Product', 'p');
$qb->innerJoin('pd', 'MyCompanyMyBundle:ProductDescription', 'pd', 'ON', $qb->expr()->eq('p.id', 'pd.departmentId'));
$query = $qb->getQuery();
$products = $query->getResult();
これは私に次のエラーを与える:
[Syntax Error] line 0, col 71: Error: Expected Doctrine\ORM\Query\Lexer::T_DOT, got 'MyCompanyMyBundle:ProductDescription'
誰もが正しい方向に私を指すことができますか?私は別の方法があれば違う方法でやっています。
それは素晴らしい武器に見えます、それに感謝します。 1つの質問:ResultSetMappingに*。テーブルを作成する方法があるかどうかを知っていますので、フィールドを設定するのではなくオブジェクト全体を取得します。私が尋ねる理由は、オブジェクトクラスのいくつかを拡張し、それらを利用したいということです。 –
私はこれを自分で試していないので、 'table。* 'がうまくいくかどうかはわかりません - 申し訳ありません。 –
Doctrine 2.4のように、 'SELECT u FROM User u JOIN Blacklist b WITH u.email = b.email'のような構文を使ってDQLで任意の結合を行うことができることに注意してください。私はあなたがQueryBuilderを使用することができるかどうかはわかりません...(これは私がこのスレッドをどのように遭遇したかです)。 – caponica