質問 > 管理機能 > 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);
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |