今回はみんな大好きEntityManagerの話題です。EC-CUBE3系でも4系でもデータを取り出したり保存したり、たくさん使われていますね。

その人気者のEntityManagerもたまに閉じこもってしまうことがあります。The EntityManager is closed.とエラーが表示され、データを取得したり登録したりしてくれないようになります。


これには理由がありまして、EntityManagerは例えばデータベースへの登録が一度失敗すると(プライマリーキーの重複など)、本当に”閉じて”しまい、その後クエリを受け付けなくなります。

どこかでエラーが発生しても最後まで実行するようなバッチ処理で起きそうとイメージしてもらえば良いのではないかと思います。
自ら閉じこもってしまったEntityManagerを再びバリバリ働くEntityManagerに戻ってもらうには、一度リセットしてやる必要があります。

EC-CUBE3の場合

if (!$app['orm.em']->isOpen()) {
    $app['orm.em'] = $app['orm.em']->create(
        $app['orm.em']->getConnection(),
        $app['orm.em']->getConfiguration()
    );
}

EC-CUBE4の場合

if (!$this->entityManager->isOpen()) {
    $this->entityManager = $this->entityManager->create(
        $this->entityManager->getConnection(),
        $this->entityManager->getConfiguration()
    );
}
日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEカスタマイズに関するお問い合わせはこちら


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ