バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > フロント機能 > お届け先に紐づくレコードがあるとお届け先の削除でエラー

フロント機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2018/8/28 16:49
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: お届け先に紐づくレコードがあるとお届け先の削除でエラー
red 様
ご返信ありがとうございます。

onDelete: CASCADE を追加してみましたが、同じエラーが出てしまいます。
プラグインを無効化して有効化し直してみても変わりませんでした。
なにか指定の方法が悪いのでしょうか?

app/Plugin/OverseasAddress/Resource/doctrine/Plugin.OverseasAddress.Entity.OverseasAddressCustomerAddress.dcm.yml
Plugin\OverseasAddress\Entity\OverseasAddressCustomerAddress:
    type: entity
    table: plg_overseas_address_customer_address
    repositoryClass: Plugin\OverseasAddress\Repository\CustomerAddressRepository
    id:
        id:
            type: integer
            nullable: false
            unsigned: false
            id: true
            column: id
            generator:
                strategy: AUTO
    fields:
        zipcode_overseas:
            type: text
            nullable: true
        tel_overseas:
            type: text
            nullable: true
        fax_overseas:
            type: text
            nullable: true
    manyToOne:
        CustomerAddress:
            targetEntity: Eccube\Entity\CustomerAddress
            inversedBy: OverseasAddressCustomerAddress
            joinColumn:
                name: customer_address_id
                referencedColumnName: customer_address_id
                nullable: false
                onDelete: CASCADE    # ★追加
    lifecycleCallbacks: {  }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

red
投稿日時: 2018/8/1 10:56
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1567
Re: お届け先に紐づくレコードがあるとお届け先の削除でエラー
onDelete: CASCADE とか出来ないんでしょうか?


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

h_tanaka
投稿日時: 2018/7/31 19:17
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
お届け先に紐づくレコードがあるとお届け先の削除でエラー
EC-CUBE3.0.16

プラグインでお届け先 CustomerAddress に関連づけたテーブルを作成しました。

app/Plugin/OverseasAddress/Resource/doctrine/Plugin.OverseasAddress.Entity.OverseasAddressCustomerAddress.dcm.yml
Plugin\OverseasAddress\Entity\OverseasAddressCustomerAddress:
    type: entity
    table: plg_overseas_address_customer_address
    repositoryClass: Plugin\OverseasAddress\Repository\CustomerAddressRepository
    id:
        id:
            type: integer
            nullable: false
            unsigned: false
            id: true
            column: id
            generator:
                strategy: AUTO
    fields:
        zipcode_overseas:
            type: text
            nullable: true
        tel_overseas:
            type: text
            nullable: true
        fax_overseas:
            type: text
            nullable: true
    manyToOne:
        CustomerAddress:
            targetEntity: Eccube\Entity\CustomerAddress
            inversedBy: OverseasAddressCustomerAddress
            joinColumn:
                name: customer_address_id
                referencedColumnName: customer_address_id
                nullable: false
    lifecycleCallbacks: {  }


マイページのお届け先の追加・編集にてレコードの登録・更新はうまくいったのですが、お届け先の削除でレコードが削除できません。

イベント発火タイミングがお届け先の削除後にしかなく、お届け先の削除前にプラグイン側の処理を呼べないためです。

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);

        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'));
    }


なお、プラグインのテーブルと紐付いたレコードがある状態でお届け先の削除を行おうとするとエラーになります。
ForeignKeyConstraintViolationException in AbstractMySQLDriver.php line 60:
An exception occurred while executing 'DELETE FROM dtb_customer_address WHERE customer_address_id = ?' with params [25]:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`eccube3.0.16`.`plg_overseas_address_customer_address`, CONSTRAINT `FK_46A071E887EABF7` FOREIGN KEY (`customer_address_id`) REFERENCES `dtb_customer_address` (`customer_address_id`))

本体の機能不足と思いますので、バグ報告として挙げます。
また、お届け先の削除でプラグイン側で削除処理を追加する方法ご存じでしたらお教えいただきたいです。

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


 



ログイン


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

統計情報

総メンバー数は88,284名です
総投稿数は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.