バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > その他 > 3.X系メーカー管理プラグイン拡張について

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
beginnerA
投稿日時: 2020/6/13 0:46
対応状況: −−−
新米
登録日: 2020/6/13
居住地:
投稿: 3
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
居住地:
投稿: 2446
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
居住地:
投稿: 3
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
居住地:
投稿: 2446
Re: 3.X系メーカー管理プラグイン拡張について
IDが識別子(主キー)なのでリレーション先のentityをセットする前に
セットしておく必要があるみたいですね。
多分、doctrine内部の仕様のようですので
そういうものなのだと思います。

id(主キー)とproduct_id(外部キー)が別カラムのテーブル構造だったら
分かりやすかったかもしれませんね。


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

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

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

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


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は63,734名です
総投稿数は96,861件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2446
4
nanasess
2078
5
yuh
1612
6
umebius
1601
7
red
1407
8
h_tanaka
1022
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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