単独で正常に機能するクエリがあります。しかし、それをサブクエリとして使用すると、どういうわけかエイリアスを認識できず、代わりにパーサーはそれがクラスに属していると認識します。
何を達成しようとしているのかを説明するには:
たとえば、部屋のあるホテル (各部屋は異なるタイプ) があり、特定の部屋タイプを含むホテルのみが必要だとします。
JOIN 内の WHERE は機能しますが、基準に一致する部屋のみを結合します。条件に一致するが、すべての部屋を選択するホテルが必要です。これはあなたの毎日のSQLソリューションなので、おそらく何か間違ったことをしていると思いました..
ルート クエリの例:
$main = $em->createQueryBuilder()
->select('hotels, rooms')
->from('Hotel', 'hotels')
->leftJoin('hotels.Rooms', 'rooms');
サブクエリ:
$sub = $em->createQueryBuilder()
->select('count(rooms.id) as hidden totalRooms')
->from('HotelToRoom', 'rooms')
->andWhere('rooms.hotel_id = hotels.id') // or a dummy ID as a solo query..
->andWhere($qb->expr()->in('rooms.type_id', implode(',', $types)))
->having('totalRooms = ?1')
->setParameter('1', count($types))
;
サブクエリは単独でうまく機能します。しかし、次のようなサブクエリとして追加すると:
$main->andWhere($qb->expr()->exists($sub->getDQL()));
次のエラーが発生します。
Error: Class 'totalRooms' is not defined.'
持つ部分がサブクエリ内を検索しなくなったような…?