プラグイン > その他 > 3.X系メーカー管理プラグイン拡張について |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
beginnerA |
投稿日時: 2020/6/13 0:46
対応状況: −−−
|
新米 登録日: 2020/6/13 居住地: 投稿: 7 |
3.X系メーカー管理プラグイン拡張について ▼テンプレート
[EC-CUBE] 3.0.18 [レンタルサーバ] ロリポップ [OS] Linux [PHP] Version 7.1.5 [データベース] MySQL 5.6.23 [WEBサーバ] Apache [ブラウザ] Chrome [導入プラグインの有無] メーカー管理プラグイン [カスタマイズの有無] メーカーを商品詳細だけでなく、商品一覧の商品にも表示できるようにリレーションを行った。 [現象] メーカーを商品詳細だけでなく、フロントの商品一覧にも表示できるよう ■Plugin.Maker.Entity.ProductMaker.dcm.yml manyToOne: Maker: targetEntity: Plugin\Maker\Entity\Maker inversedBy: ProductMaker joinColumn: name: maker_id referencedColumnName: maker_id #ここから下を追記 Product: targetEntity: Eccube\Entity\Product inversedBy: ProductMaker joinColumn: name: product_id referencedColumnName: product_id ■Eccube.Entity.Product.dcm.yml oneToMany: ProductReviews: targetEntity: Plugin\ProductReview\Entity\ProductReview mappedBy: Product #ここから下を追記 ProductMaker: targetEntity: Plugin\Maker\Entity\ProductMaker mappedBy: Product 上記の様に追記を行い、結合関係を持たせました。 予定通り、フロントの商品一覧で各商品にメーカー名を表示させる事はできたのですが、この状態で管理画面の商品編集からメーカーを選択し商品登録をすると An exception occurred while executing 'INSERT INTO plg_product_maker (product_id, maker_url, del_flg, create_date, update_date, maker_id) VALUES (?, ?, ?, ?, ?, ?)' with params [null, null, 0, "2020-01-11 00:00:00", "2020-01-11 00:00:00", 2]: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'product_id' cannot be null このようなエラーが出てしまいます。 エラー内容からすると、product_idに値が渡されてないという事だと思います。 ■Plugin.Maker.Entity.ProductMaker.dcm.yml ー省略ー #ここから下を追記 Product: targetEntity: Eccube\Entity\Product inversedBy: ProductMaker joinColumn: name: product_id referencedColumnName: product_id 先ほどの追記部分を削除すると正常に値は渡されています。 この状態で管理画面の商品登録画面にて、一度メーカーを設定した上で再度、追記部分を記載したあとにメーカーを未選択の状態にするとデータベースのテーブルからも該当のデータは削除されている事から remove については正常に動作しているように思えます。 ■Event\Maker.php内のonAdminProductEditComplete $ProductMaker ->setId($Product->getId()) ->setMakerUrl($makerUrl) ->setDelFlg(Constant::DISABLED) ->setMaker($maker); /** * @var EntityRepository $this->app['orm.em'] */ $this->app['orm.em']->persist($ProductMaker); $this->app['orm.em']->flush($ProductMaker); log_info('Event: product maker save success!', array('Product id' => $ProductMaker->getId())); log_info('Event: product maker hook into the product management complete end.'); flushの際にエラーが出ているとは思うのですが、情報が少なく解決策が見つかっていません。 Eccubeの書籍やSymfonyの書籍を購入してみたのですが、今ひとつ情報量が少なく解決できないままでハマってしまっております。 わかる方がいらっしゃいましたら、教えていただけると助かります... |
468 |
投稿日時: 2020/6/13 1:02
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 3.X系メーカー管理プラグイン拡張について 通常、リレーションを設定した場合、setメソッドではEntityを渡す事になるかと思います。
なので、以下のようにProductIdを渡すのではなく、Productを渡す必要があるかと思います。 ->setId($Product->getId()) ↓ ->setProduct($Product) 該当プラグインのソースを見たことがないのでProductMakerEntityに setProduct()メソッドがあるのかどうかよく分かりませんが...
|
beginnerA |
投稿日時: 2020/6/13 1:25
対応状況: −−−
|
新米 登録日: 2020/6/13 居住地: 投稿: 7 |
Re: 3.X系メーカー管理プラグイン拡張について ありがとうございます!本当に助かりました!
Entityには /** * Set Product. * * @param int $Product * * @return $this */ public function setProduct($Product) { $this->Product = $Product; return $this; } /** * Get Product. * * @return \Eccube\Entity\Product */ public function getProduct() { return $this->Product; } こちらを追記していたため、先ほど教えて頂いた ->setProduct($Product) このコードを追加する事で解決されたようです。 ただ、 ->setId($Product->getId()) このコードとの差し替えだと Entity of type Plugin\Maker\Entity\ProductMaker is missing an assigned ID for field 'id'. The identifier generation strategy for this entity requires the ID field to be populated before EntityManager#persist() is called. If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly. このようなエラーが表示されてしまうようで、 ->setId($Product->getId()) ->setProduct($Product) と続く形であればエラーがでないようです。 まだ素人なので、このエラーが出る意味があまり理解できてはないのですが、、 |
468 |
投稿日時: 2020/6/15 9:17
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 3.X系メーカー管理プラグイン拡張について IDが識別子(主キー)なのでリレーション先のentityをセットする前に
セットしておく必要があるみたいですね。 多分、doctrine内部の仕様のようですので そういうものなのだと思います。 id(主キー)とproduct_id(外部キー)が別カラムのテーブル構造だったら 分かりやすかったかもしれませんね。
|
beginnerA |
投稿日時: 2020/6/30 10:36
対応状況: 解決済
|
新米 登録日: 2020/6/13 居住地: 投稿: 7 |
Re: 3.X系メーカー管理プラグイン拡張について ご返信が遅くなり大変申し訳ございません。
考えても理解できない事は、そういうものだという事で理解しておきます。 本当に助かりました。 改めてありがとうござました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |