質問 > 管理機能 > ArrayCollectionで複数件取得できるはずが1件しか取得できない |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
emotion |
投稿日時: 2023/12/11 12:19
対応状況: −−−
|
新米 登録日: 2023/4/26 居住地: 投稿: 9 |
ArrayCollectionで複数件取得できるはずが1件しか取得できない [EC-CUBE] 4.1.2-p1
[レンタルサーバ] レンタルサーバ名 [OS] 使用しているOS名、バージョン [PHP] 7.4.30(サーバ)7.4.26 (ローカル) [データベース] MySQL [WEBサーバ] 使用しているWEBサーバ名、バージョン [ブラウザ] 使用しているブラウザ名、バージョン [導入プラグインの有無] プラグインあり [カスタマイズの有無] カスタマイズあり [現象] 商品テーブルにORMで紐づく、 商品詳細テーブルを作成し、 商品テーブルのEntity↓ /** * @var \Doctrine\Common\Collections\Collection|ProductDetail[] * * @ORM\OneToMany(targetEntity="Customize\Entity\ProductDetail", mappedBy="Product", cascade={"persist","remove"}) * */ private $ProductDetails; 商品詳細テーブルのEntity↓ /** * @var \Customize\Entity\Product * * @ORM\ManyToOne(targetEntity="Customize\Entity\Product", inversedBy="ProductDetails") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="product_id", referencedColumnName="id") * }) */ private $Product; としました。(ProductImageを参考に構成) get, setも通常通り作成し、qbでもきちんとaddSelectとleftJoinをしてデータを取得しているのに、なぜか商品テーブルのデータを取得したときに、 紐づく商品詳細データがfindByで取得した場合は2件取得できるのに対して、Collectionでは1件しか取得できません。 構成的にはProductImageと全く同じはずなのに なぜデータが1件しか取得できないかが不明です。 お分りの方いらっしゃったらアドバイスぜひ宜しくお願い致します。 |
shinra |
投稿日時: 2023/12/11 15:30
対応状況: −−−
|
一人前 登録日: 2017/9/2 居住地: 投稿: 136 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない
上記ですが、Customize\Entity\ProductではなくEccube\Entity\Product じゃないでしょうか? 一度確認して貰えればと思います |
emotion |
投稿日時: 2023/12/11 16:05
対応状況: −−−
|
新米 登録日: 2023/4/26 居住地: 投稿: 9 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない 商品テーブルをカスタマイズ領域に再構築しているので
Customize\Entity\Productで合っています。 |
yuh |
投稿日時: 2023/12/11 21:34
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1882 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない getter、setter部分ってどうなってますか?
|
fukuoka |
投稿日時: 2023/12/12 18:44
対応状況: −−−
|
半人前 登録日: 2022/8/9 居住地: 投稿: 19 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない Customizeに新たに作っているということであれば、もしかしたらArrayCollectionの初期化の部分の可能性はありませんでしょうか?
ProductImageの場合はこのような処理をしていますがいかがでしょうか?
|
emotion |
投稿日時: 2023/12/13 10:58
対応状況: −−−
|
新米 登録日: 2023/4/26 居住地: 投稿: 9 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない __constructにArrayCollectionの初期化も追加しています。
getter、setterもProductImageと全く同じ作りにしています。 |
k.nakayama |
投稿日時: 2023/12/14 17:28
対応状況: −−−
|
常連 登録日: 2019/10/11 居住地: 投稿: 67 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない Collectionとのことなので関係ないかもしれませんが、
「qbでもaddSelectとleftJoinをしてデータを取得している」というのが少し気になったのですが、qbで取得されているあたりのコードを共有してもらうことはできますか?
|
emotion |
投稿日時: 2023/12/26 13:53
対応状況: −−−
|
新米 登録日: 2023/4/26 居住地: 投稿: 9 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない $qb = $this->createQueryBuilder('p')
->addSelect('pd') ->leftJoin('p.ProductDetails', 'pd'); qbの部分はこんな感じです。 |
k.nakayama |
投稿日時: 2023/12/27 8:56
対応状況: −−−
|
常連 登録日: 2019/10/11 居住地: 投稿: 67 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない $qbにwhereなどでの絞り込みは続いていないでしょうか?
絞り込みがあった場合、Collectionの要素数が少なく取得されることは可能性があります。
|
sw_sn |
投稿日時: 2023/12/27 19:40
対応状況: −−−
|
常連 登録日: 2018/5/25 居住地: 投稿: 49 |
Re: ArrayCollectionで複数件取得できるはずが1件しか取得できない 参考にならないかも知れませんが、私だったら以下を試してみます。
・devモードのprofilerでSQLを確認する ・$queryBuilder->getQuery()->getSQL()でSQLを確認する ・以下のようにEAGERを設定して、データの先読みを強制してみる @ORM\ManyToOne(targetEntity="Customize\Entity\Product", inversedBy="ProductDetails", fetch="EAGER") |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |