FORSMILE
EN
Symfony2021/05/10

Iterate with fetch join in class ~ not allowed.エラー修正[Symfony]

SymfonyベースのEC-CUBEというネットショップシステムで開発しているときに、発生したエラーについて解決法などを調べたので備忘録としてブログに残します。

ブログ一覧へ / Back to Blog

SymfonyベースのEC-CUBEというネットショップシステムで開発しているときに、発生したエラーについて解決法などを調べたので備忘録としてブログに残します。

ちょっと重たいSQLを発行しなければならなかったので、ORMのiterateで処理しようとしたところ、下記エラーが発生しました。

text
Iterate with fetch join in class Eccube\Entity\ProductClass using association Product not allowed.

→Iterate with fetch join in subquery

Iterate with fetch join in class ~ not allowed.エラー解消

Gitの文を要約すると、distinctしてねということです。

selectに対してdistinctを実行してあげることで解決することができました。

ちなみにdistinctは重複するレコードを一つにまとめる命令になります。

解決したコード

php
$qb->select('p, pc')
    ->distinct();

$result = $qb->iterate();

…

原因

上記エラーは、取得するEntity内にJoinしていると発生するようです。

実際のEntityの部分は下記です。(EC-CUBE src)

javascript
/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\OneToMany(targetEntity="Eccube\Entity\ProductClass", mappedBy="Product", cascade={"persist","remove"})
 */
private $ProductClasses;

Entity/Product.phpの中でProductClassをJoinしている例になります。上記のように、Joinしている場合にdistinct()してあげる必要があります。

📦
Amazon で関連書籍・ツールを検索
Symfony PHP フレームワーク
Amazonで探す →(アソシエイトリンク)