バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > Doctorineについて

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yuy-tank
投稿日時: 2017/11/24 14:42
対応状況: −−−
一人前
登録日: 2017/11/10
居住地:
投稿: 72
Doctorineについて
$app['eccube.service.cart'] (中身は\Eccube\Service\CartService) に格納されているオブジェクトAを編集するために、プラグインからサービスプロバイダでPimpleのextend()、share()を用いて編集しました。

しかし、このオブジェクトAは、\Eccube\Service\CartServiceにて、エンティティマネージャからgetRepository()、find()を用いて、DBからEntityオブジェクトとして取得されたものが格納されており、実際にサービスプロバイダでこのオブジェクトAに変更を加えると、あるページでは、$app['eccube.service.cart']を呼び出した後にflush()されているためか、DBが更新されてしまいます。

具体的には、カートで購入手続きを行う際、

CartController::index (SHOPPING CART)
→ CartController::buystep (ログインかゲスト購入の選択)
→ ShoppingController::index (ご注文内容のご確認)

と手順を踏むのですが、ShoppingController::indexページに行くと、DBが更新されてしまいます。(おそらくflush()されているため)
getRepository()、find()を用いてDBからEntityオブジェクトを取得すると、それがDoctorineによって追跡されるらしいのですが、
この追跡を止める方法はないでしょうか?そもそもgetRepository()から取得したものは編集しないほうがよいのでしょうか?
umebius
投稿日時: 2017/11/24 21:54
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: Doctorineについて

エンティティをDoctrineから解放するにはdetachメソッドが利用可能です。

$app['orm.em']->detach($entity);


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は95,940名です
総投稿数は111,632件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2325
5
umebius
2085
6
yuh
1893
7
h_tanaka
1850
8
red
1574
9
mcontact
1535
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
804
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.