0

単独で正常に機能するクエリがあります。しかし、それをサブクエリとして使用すると、どういうわけかエイリアスを認識できず、代わりにパーサーはそれがクラスに属していると認識します。

何を達成しようとしているのかを説明するには:

たとえば、部屋のあるホテル (各部屋は異なるタイプ) があり、特定の部屋タイプを含むホテルのみが必要だとします。

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.'

持つ部分がサブクエリ内を検索しなくなったような…?

4

0 に答える 0