バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > フロント機能 > マイページのお届け先を削除するとプラグインテーブルで外部キー制約違反になってしまう

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2019/4/1 14:40
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
マイページのお届け先を削除するとプラグインテーブルで外部キー制約違反になってしまう
EC-CUBE 3.0.17

お届け先 dtb_customer_address に紐づくプラグイン独自のテーブルが存在する場合、マイページのお届け先編集でお届け先を削除しようとすると、ForeignKeyConstraintViolationException が発生する。

ForeignKeyConstraintViolationException in AbstractMySQLDriver.php line 60:
An exception occurred while executing 'DELETE FROM dtb_customer_address WHERE customer_address_id = ?' with params [29]:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`eccube3.0.16`.`plg_customer_address`, CONSTRAINT `FK_46A071E887EABF7` FOREIGN KEY (`customer_address_id`) REFERENCES `dtb_customer_address` (`customer_address_id`))

dtb_customer_address のレコードが削除されるタイミングでプラグイン独自のテーブルのレコードを削除すべきだが、用意されているフックポイントが削除処理を flush した後であり、プラグイン側で処理を実行する前にエラーになってしまう。

src/Eccube/Controller/Mypage/DeliveryController.php
    /**
     * お届け先を削除する.
     *
     * @param Application $app
     * @param $id
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function delete(Application $app, Request $request, $id)
    {
        $this->isTokenValid($app);

        log_info('お届け先削除開始', array($id));

        $Customer = $app['user'];

        $status = $app['eccube.repository.customer_address']->deleteByCustomerAndId($Customer, $id);    // ★ ここで削除されてFKエラーになる

        if ($status) {
            $event = new EventArgs(
                array(
                    'id' => $id,
                    'Customer' => $Customer,
                ), $request
            );
            $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_MYPAGE_DELIVERY_DELETE_COMPLETE, $event);    // ★ ここにフックポイントがある

            $app->addSuccess('mypage.address.delete.complete');

            log_info('お届け先削除完了', array($id));

        } else {
            $app->addError('mypage.address.delete.failed');

            log_info('お届け先削除失敗', array($id));
        }

        return $app->redirect($app->url('mypage_delivery'));
    }
red
投稿日時: 2019/4/1 21:17
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1567
Re: マイページのお届け先を削除するとプラグインテーブルで外部キー制約違反になってしまう
既知の問題かと。。
ON DELETE CASCADE で対応するしかないんじゃないでしょうか。。


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

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


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.