バージョン選択

フォーラム

メニュー

オンライン状況

86 人のユーザが現在オンラインです。 (73 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 86
もっと...

サイト内検索

プラグイン > その他 > 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()メソッドがあるのかどうかよく分かりませんが...


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

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(外部キー)が別カラムのテーブル構造だったら
分かりやすかったかもしれませんね。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

beginnerA
投稿日時: 2020/6/30 10:36
対応状況: 解決済
新米
登録日: 2020/6/13
居住地:
投稿: 7
Re: 3.X系メーカー管理プラグイン拡張について
ご返信が遅くなり大変申し訳ございません。

考えても理解できない事は、そういうものだという事で理解しておきます。

本当に助かりました。
改めてありがとうござました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,295名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.