Doctrine Query Builder を使用してデータベースにクエリを実行しようとしています (これは Symfony2 フォーム用であるため、クエリ ビルダーを使用する必要があります)。
次のエラーが発生します。
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'c2_.caseFileID' in 'on clause'
私のクエリは次のとおりです。
$er->createQueryBuilder('ia')
->select( 'ia' )
->from( 'TheBundle:CaseInstruction', 'ci' )
->innerJoin( 'TheBundle:CaseFile', 'cf', 'WITH', 'ci.caseFile = cf' )
->innerJoin( 'TheBundle:Workflow', 'wf', 'WITH', 'wf.product = ci.product AND wf.company = cf.company' )
->innerJoin( 'TheBundle:WorkflowInstructionAction', 'wfia', 'WITH', 'wfia.instructionAction = ia AND wfia.workflow = wf' )
->innerJoin( 'TheBundle:Process', 'p', 'WITH', 'p.currentStatus = ci.status AND p.workflow = wf' )
->innerJoin( 'TheBundle:ProcessTrigger', 'pt', 'WITH', 'pt.instructionAction = ia AND pt.process = pt' )
->where( 'ci.id = :cid' )
->andWhere( 'ia.isSystemAction = :isSystemAction' )
->setParameter( 'isSystemAction', '0' )
->setParameter( 'cid', $options['caseInstructionId'] );
これは、次の教義クエリに評価されます (例外に示されているように):
'SELECT i0_.id AS id0,
i0_.codeName AS codeName1,
i0_.permissions AS permissions2,
i0_.description AS description3,
i0_.isSystemAction AS isSystemAction4,
i0_.instructionActivityID AS instructionActivityID5,
i0_.instructionSubjectID AS instructionSubjectID6
FROM InstructionAction i0_
INNER JOIN CaseFile c1_ ON (c2_.caseFileID = c1_.id)
INNER JOIN Workflow w3_ ON (w3_.productID = c2_.productID AND w3_.companyID = c1_.companyID)
INNER JOIN WorkflowInstructionAction w4_ ON (w4_.instructionActionID = i0_.id AND w4_.workflowID = w3_.id)
INNER JOIN Process p5_ ON (p5_.currentStatusID = c2_.instructionStatusID AND p5_.workflowID = w3_.id)
INNER JOIN ProcessTrigger p6_ ON (p6_.instructionActionID = i0_.id AND p6_.processID = p6_.id), CaseInstruction c2_
WHERE c2_.id = ?
AND i0_.isSystemAction = ?' with params ["307", "0"]
(できるだけ読みやすいようにしています)
このエラーを修正する方法を知っている人はいますか? 私はネイティブ SQL バージョンを動作させていますが、実際にはそれを Doctrine Query Builder に変換しようとしていました。
編集:作業中のSQL:
SELECT ia.* FROM (InstructionAction ia, CaseInstruction ci)
JOIN CaseFile cf ON ci.caseFileID=cf.id
JOIN Workflow wf ON ci.productID=wf.productID AND wf.companyID = cf.companyID
JOIN WorkflowInstructionAction wia ON wia.workflowID=wf.id AND wia.instructionActionID = ia.id
JOIN Process p ON p.currentStatusID = ci.instructionStatusID AND p.workflowID = wf.id
JOIN ProcessTrigger pt ON pt.instructionActionID = ia.id AND pt.processID = p.id
WHERE ci.id = 275
AND ia.isSystemAction=0;
CaseInstruction IDは単なる CaseInstruction ID の例であり、Query Builder では に275
置き換えられます。$options['caseInstructionID']