0

私はphpMyAdminで正しく動作する以下のコードを持っています:

select testers.department from testers
inner join request_details
on testers.id = request_details.test_id
where request_details.request_id = '12345'

DQL私はそれを以下のように変換してみました:

$query =  Doctrine_Query::create()
->select('t.department')
->from('testers t, request_details r')
->innerJoin('t.id r')
->where('t.id = r.tester_id')
->andWhere('r.request_id = ?', 12345);

ただし、var_dump()クエリ結果を保持する変数のaは。を返しますNULL

4

1 に答える 1

1

Doctrine2ではQueryBuilderクラスを使用する必要があり、DQLのテーブル名とフィールドではなく、クラス名とプロパティを使用する必要があるため、使用しているDoctrineバージョン。したがって、テーブル フィールド名ではなく、クラス フィールド名に結合する必要があります。

innerJoin('t.request_details', 'r') // where request_details is a propery on Tester

また、それらを結合する場所 (where(t.id = r.tester_id)) は必要ありません。これは Doctrine によって管理され、エンティティが適切にマップされていれば機能します。

from 部分に request_details r も必要ありません。これも Doctrine が処理します。

また、from ではテーブル名ではなくクラス名を使用してください。

編集(getResults()の前にgetQuery()を忘れた):最終的に、クエリは次のようになります。

$queryBuilder = EntityManager::create(//em options)->createQueryBuilder();
$queryBuilder->select('t.department')
             ->from('Tester', 't')
             ->innerJoin('t.request_details', 'r') // request details is a propery on Tester, that maps to RequestDetails
             ->where('r.request_id = ?1')
             ->setParameter(1, 123);

Doctrine はこれを SQL に変換し、結合します。最後に、次のものも取得する必要があります。

$departments = $queryBuilder->getQuery()->getResult();

編集:Doctrine 1の場合、次のようなものが機能するはずです:

$q = Doctrine_Query::create()
     ->select('t.department')
     ->from('Tester t')
     ->innerJoin('t.request_details r') // request details is a propery on Tester, that maps to RequestDetails
     ->where('r.request_id = ?', 123);
$depts = $q->fetchArray();

私はDoctrine 1にあまり詳しくないので、詳細についてはこれを見てください: http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language .html

于 2012-08-28T09:27:21.520 に答える