カタログには、製品と記事があります。商品は商品の変種です。 カタログでは、製品はカテゴリでソートされ、製品はカタログで1回または複数回使用できます。Symfony3/Doctrine2:QueryBuilderを使用したInnerJoinを使用したサブクエリ
カタログの記事を取得したいのですが、自分の記事がカタログに直接割り当てられていないため、商品のみが表示されます。
私はDoctrineのクエリビルダを使用して、次のSQLを構築したいと思います:
SELECT a.code, a.productCode, a.name
FROM Article a
INNER JOIN (
SELECT p.code
FROM Product p
WHERE p.catalogCode = 'MYCODE'
GROUP BY p.code
ORDER BY p.code ASC
) AS results ON results.productCode = a.productCode
このクエリは、MySQLで動作します。私は私のエンティティのリポジトリでそれを実行しようとしましたが、私はエラーを持っている:
public function findArticlesByCatalog($catatlogCode)
{
return $this->getEntityManager()
->createQuery(
'SELECT a.code, a.productCode, a.name
FROM AppBundle:Article a
INNER JOIN (
SELECT p.code
FROM AppBundle:CatalogProduct p
WHERE p.catalogCode = :code
GROUP BY p.code
ORDER BY p.code ASC
) AS results ON results.productCode = a.productCode'
)
->setParameter('code', $catatlogCode)
->getResult();
}
はエラー(INNER JOINをした直後):
[Semantical Error] line 0, col 81 near '(
SELECT': Error: Class '(' is not defined.
だから、私は使用してそれを構築したいと思います私のコントローラーのDoctrineのクエリービルダー。
クエリの残りの部分を指定する方法
$repository = $em->getRepository('AppBundle:Article');
$qb = $repository->createQueryBuilder('a');
$qb->select(array('a.code', 'a.productCode', 'a.name'))
->innerJoin(
'AppBundle:CatalogProduct', 'p',
'WITH',
$qb->select('p.code')
->where(
$qb->expr()->eq('p.catalogCode', ':code')
)
->setParameter('code', $catCode)
->groupBy('p.code')
->orderBy('p.code', 'ASC')
)
// ...
...私は何かを始めたが、私はそれを終了するか分からないのですか?
AS results ON results.productCode = a.productCode'
ありがとうございました!
オールディーズ、しかし、ゴールディ:http://stackoverflow.com/questions/6637506/doing-a-where-in-subquery-in-doctrine-2 – LBA
@LBAありがとうございますが、私は私の質問と比べてとてもよく分かりません。 CatalogProductリポジトリを使用して2番目のクエリビルダを作成し、そのDQLを取得する必要がありますか?私は自分の投稿を更新しました。私は質問の「AS」と「ON」の部分に問題があります。 – Felurian