ECCUBE3 の受注データ更新時にエラーが発生した
表題の通り、ECCUBE3でエラーが発生したのでその対処法をメモ代わりにまとめておきます。エラー内容(メッセージ)は下記の通りです。
A new entity was found through the relationship 'Eccube\Entity\Order#Pref' that was not configured to cascade persist operations for entity: 神奈川県. 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"})
エラー発生時の状況としては、ECCUBE3でセッションに登録してあるデータを取り出して、受注情報の都道府県を更新しようとしてエラーになりました。具体的には下記のようなコードでエラーになりました。
// こんな感じのことをしようとしてエラー
$session_pref = $app['session']->get('__session_key_pref__');
$Order->setPref($session_pref);
この箇所でエラーではないのですが、保存時にエラーになってるみたいです。
原因と対処方法
SymfonyのDoctrineでエラーになっているのだと思います。「Entity:神奈川県の永続操作をカスケードするように構成されていなかった関係「Eccube \ Entity \ Order#Pref」によって新しいエンティティが見つかりました。」ということなので、たぶん関係のないエンティティを無理やり設定するとまずい感じなのでしょうか?よくわかりません。
暫定的な対処方法として、DBからデータを取り直すということにしました。これでうまく登録できたので良しとします。具体的には以下のような感じです。
$prefId = $session_pref->getId();
$pref = $app['eccube.repository.master.pref']->find($prefId);
$Order->setPref($pref);
無駄な処理ですが、まあ受注登録時の一回なので良しとします。
以上。
コメントを書く