ここに構文の問題があることは知っていますが、理解できません。5 つのテーブルの SELECT および INNER JOIN を実行しようとしていますが、Symfony は、JOIN 内のエンティティが定義される前に使用されていると不平を言っています。
実際のエラーは次のとおりです。[Semantical Error] line 0, col 121 near 'I ON C.id = ': Error: Identification Variable MySiteBundle:Items used in join path expression but was not defined before.
これがPHPコードです。
注:このクエリを 2 つの列、2 つのテーブル、および 1 つの結合に短縮して、質問を簡潔にし、要点を示しました。実際のクエリははるかに長く、同じエラーが発生しています。
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery(
'select C.name as CName, I.id as IId
FROM MySiteBundle:Categories C
INNER JOIN MySiteBundle:Items I ON C.id = I.category_id');
$result = $query->getResult();
アップデート
示唆されているように、私は DQL コードを廃止し、Query Builder コードを使用しています。という非常によく似たエラーが表示されます'Categories c': Error: Class 'Categories' is not defined
。私のQBコードは以下です。
$em = $this->getDoctrine()->getEntityManager();
$qb = $em->createQueryBuilder()
->select('c.name, i.id, i.image, i.name, i.description, m.id, m.quantity, m.value, m.qty_received, m.custom_image, m.custom_name, m.custom_description, u.user1fname, u.user1lname, u.user2fname, u.user2lname')
->from('Categories', 'c')
->innerJoin('Items', 'i', 'ON', 'c.id = i.category_id')
->innerJoin('MemberItems', 'm', 'ON', 'i.id = m.item_id')
->innerJoin('User', 'u', 'ON', 'm.memberinfo_id = u.id')
->where('u.id = ?', $slug)
->orderBy('c.id', 'ASC')
->getQuery();
$memberItems = $qb->getResult();
助言がありますか?