バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > 開発について > 受注ステータスを更新する際、flushでエラー

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ya50
投稿日時: 2017/1/30 16:00
対応状況: −−−
半人前
登録日: 2016/12/26
居住地:
投稿: 13
受注ステータスを更新する際、flushでエラー
バージョン:eccube-3.0.13

受注ステータスを更新するプラグインを作成しているのですが、
flushでエラーとなってしまいます。

以下、処理の抜粋なのですが、どこが悪いのかご教授頂けないでしょうか。
ちなみにまず動くことを確認したいため、「〜Event.php」内で行っています。


$query = $qb->getQuery();
$em = $app['orm.em'];
foreach ($query->getResult() as $Order) {
$Order = $app['eccube.repository.order']->find($Order->getId());
$OrderStatus = $app['eccube.repository.master.order_status']->find(5);
$Order->setOrderStatus($OrderStatus);
$em->persist($Order);
$em->flush();
}

エラーメッセージは、以下が出力されています。

A new entity was found through the relationship 'Eccube\Entity\OrderDetail#Order' that was not configured to cascade persist operations for entity: Eccube\Entity\Order@0000000045a666a6000000000f8020d6. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'Eccube\Entity\Order#__toString()' to get a clue.
senjyu
投稿日時: 2017/2/7 14:14
対応状況: −−−
新米
登録日: 2016/10/7
居住地:
投稿: 8
Re: 受注ステータスを更新する際、flushでエラー
私も現在、同様のエラーが出て、解決できずに悩んでいます。

ya50さん、その後、解決しましたでしょうか?
umebius
投稿日時: 2017/2/7 15:34
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 受注ステータスを更新する際、flushでエラー
すみません、この行はどういう必要性があるのでしょうか?
$Order = $app['eccube.repository.order']->find($Order->getId());

$query->getResult()の結果の$Orderはデータが不完全ということですか?あるいは\Eccube\Entity\Orderオブジェクトではない?
$qbにどういうクエリが設定されているのか拝見したいですね。

なお、この行を消すか、あるいは下記のどちらか一方に書き換えてもエラー出ますでしょうか。
$em->merge($Order);
or
$em->refresh($Order);


ちなみに、Order.dcm.ymlでcascade: ["persist"の設定ありますよね?

        OrderDetails:
            targetEntity: Eccube\Entity\OrderDetail
            mappedBy: Order
            orderBy:
                id: ASC
            cascade: ["persist"]


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

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

ya50
投稿日時: 2017/2/9 16:33
対応状況: −−−
半人前
登録日: 2016/12/26
居住地:
投稿: 13
Re: 受注ステータスを更新する際、flushでエラー
ご回答ありがとうございます。

senjyu様

色々試してみましたが解決できなかったため、直接updateを投げることにしました。。。

umebius様

当時のソースが残っていないのですが、$qb作成までは流れは以下のように実装していたはずです。
検索実行後にセッションへ格納される検索条件を使用しています。

$request = $event->getRequest();
$session = $request->getSession();

$searchData = $session->get('eccube.admin.order.search');
$qb = $app['eccube.repository.order']->getQueryBuilderBySearchDataForAdmin($searchData);

>$Order = $app['eccube.repository.order']->find($Order->getId());
これに関しては、色々と試す中で残ってしまった処理だったと思います。。。

>ちなみに、Order.dcm.ymlでcascade: ["persist"の設定ありますよね?
設定はされていました。本体は一切の修正を行っていません。

>なお、この行を消すか、あるいは下記のどちらか一方に書き換えてもエラー出ますでしょうか。
ソースが残っていなくて試せないのですが、
$em->merge($Order);
は駄目だった気がします。
umebius
投稿日時: 2017/2/10 8:55
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 受注ステータスを更新する際、flushでエラー
$em->flush();
ではなく
$em->flush($Order);
だったとしたらエラーは出るのかが気になりました。
記載いただいたのとは異なる他の部分は影響していないのかということです。
ソースが残っていないということですが、Doctrineは難解ですよね。
LaravelのEloquentが本当に美しく感じます。


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

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

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


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.