2012-03-27 18 views
4

私は現在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' 

誰もが正しい方向に私を指すことができますか?私は別の方法があれば違う方法でやっています。

答えて

8

関係が定義されていないと、私はあなたがテーブルに加わることはできないと思います。これは、DQLを使用するときは、テーブルではなくオブジェクトにクエリを実行しているため、オブジェクトが互いに認識できない場合は、それらを結合できないためです。

NativeQueryを使用することを検討する必要があります。 docsから:

A NativeQuery lets you execute native SELECT SQL statements, mapping the results according to your specifications. Such a specification that describes how an SQL result set is mapped to a Doctrine result is represented by a ResultSetMapping. It describes how each column of the database result should be mapped by Doctrine in terms of the object graph. This allows you to map arbitrary SQL code to objects, such as highly vendor-optimized SQL or stored-procedures.

基本的に、あなたは生のSQLを記述しますが、既存のエンティティに結果をマッピングする方法教義を教えてください。

これが役に立ちます。

+0

それは素晴らしい武器に見えます、それに感謝します。 1つの質問:ResultSetMappingに*。テーブルを作成する方法があるかどうかを知っていますので、フィールドを設定するのではなくオブジェクト全体を取得します。私が尋ねる理由は、オブジェクトクラスのいくつかを拡張し、それらを利用したいということです。 –

+0

私はこれを自分で試していないので、 'table。* 'がうまくいくかどうかはわかりません - 申し訳ありません。 –

+1

Doctrine 2.4のように、 'SELECT u FROM User u JOIN Blacklist b WITH u.email = b.email'のような構文を使ってDQLで任意の結合を行うことができることに注意してください。私はあなたがQueryBuilderを使用することができるかどうかはわかりません...(これは私がこのスレッドをどのように遭遇したかです)。 – caponica

関連する問題