SELECT句でサブクエリを使用して単純なSELECTクエリを実行しようとしていますが、これを行う方法が見つからないだけです。私はDQLとQueryBuilderの両方で試しましたが、いずれも動作しません。コードは、私はちょうど問題を説明するための単純な例です、私はサブクエリの正当なユースケースを持って、私はちょうど結合を使用することができると言うことはありません。Doctrine 2:(SELECT句の)サブクエリ列を使用する方法
// With QueryBuilder
$query = $qb->select(array('a',
'(SELECT at.addresstypeName
FROM e:Addresstype at
WHERE at.addresstypeId = a.addresstypeId
) AS addresstypeName'))
->from('e:Address', 'a')
->where('a.addressId = :addressId')
->setParameter('addressId', 1);
// With DQL
$dql = "SELECT a,
(SELECT at.addresstypeName
FROM e:Addresstype at
WHERE at.addresstypeId = a.addresstypeId
) AS addresstypeName
FROM e:Address a
WHERE a.addressId = :addressId";
$query = $em->createQuery($dql)->setParameter(':addressId', 1);
次の関係がアドレステーブルに定義されます。
/**
* @ORM\ManyToOne(targetEntity="Addresstype")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="addresstype_id", referencedColumnName="addresstype_id")
* })
*/
protected $addresstype;
ネイティブSQLでは、クエリは次のようになります。
SELECT
a.*,
(
SELECT at.addresstype_name
FROM addresstype at
WHERE at.addresstype_id = a.addresstype_id
) AS addresstype_name
FROM address a
WHERE a.address_id = 1
任意のアイデア?私にとって
はちょうど私が取得し、それを試してみましたジョインこと次のエラー:[意味的なエラー]行0、列112の 'addresstypeId)':エラー:クラスNP \ entities \ AddressにはフィールドまたはアソシエーションはありませんaddresstypeId addresstypeIdはAddressエンティティで定義されないため、通常、外部キーを使用する必要はありません。 – Rocket04
あなたの質問に答えるためにあなたのサブクエリをコピーしてコピーするだけです。私はあなたのエンティティ(とスキーマ)についての情報なしでこのサブクエリを修正することはできません。どちらの場合でも、実際のスキーマを使用して実際のクエリを投稿するのが最善です。あなたの質問「サブクエリ列の使い方」に回答しましたので、同意してください。私はあなたに良いサブクエリを書くのを手伝うつもりです(これは別の質問です)。 – Flip
スキーマの詳細を追加しました。私はそこに関係があることを言及する価値があったと思います。 – Rocket04