プラグイン > 開発について > 受注ステータスを更新する際、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"の設定ありますよね?
|
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が本当に美しく感じます。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |