操作
Bug(バグ) #3473
完了opBlogPlugin を使用しているメンバーが退会しようとすると500エラーとなる
開始日:
2013-10-25
期日:
進捗率:
100%
予定工数:
3.6 で発生するか:
Unknown (未調査)
[QA]バグ通知済:
いいえ
3.8 で発生するか:
Unknown (未調査)
説明
Overview (現象)¶
opBlogPlugin で RSS の URL を設定しているメンバーが退会処理を行おうとすると下記のエラーが発生する。
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`ukimura_dazai2_pne_jp/blog_rss_cache`, CONSTRAINT `blog_rss_cache_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`))
Causes (原因)¶
https://github.com/tejimaya/opBlogPlugin/blob/master/config/doctrine/schema.yml#L14
BlogRssCache の Member に対するリレーションに onDelete: cascade
等が設定されていない。デフォルトでは blog_rss_cache.member_id
に対応する member のレコードの削除操作は拒否される。
Way to fix (修正内容)¶
onDelete: cascade
の記述を追加し、それに伴うマイグレーションスクリプトを追加する。
Youichi Kimura さんが約11年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
Pull Request 送りました
https://github.com/tejimaya/opBlogPlugin/pull/1
Yuya Watanabe さんがほぼ11年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
下記は 1.0.1 から 1.0.3 にマイグレーションを行った結果となるためインデックスの追加が含まれていますが,本チケットの部分について問題無いと思います.
元
$ mysql -u root -p example_com -e 'show create table blog_rss_cache\G' Enter password: *************************** 1. row *************************** Table: blog_rss_cache Create Table: CREATE TABLE `blog_rss_cache` ( `id` int(11) NOT NULL AUTO_INCREMENT, `member_id` int(11) DEFAULT NULL, `title` text, `description` text, `link` text, `date` datetime DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), KEY `date_INDEX_idx` (`date`), KEY `member_id_idx` (`member_id`), CONSTRAINT `blog_rss_cache_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
マイグレーション後
$ mysql -u root -p example_com -e 'show create table blog_rss_cache\G' Enter password: *************************** 1. row *************************** Table: blog_rss_cache Create Table: CREATE TABLE `blog_rss_cache` ( `id` int(11) NOT NULL AUTO_INCREMENT, `member_id` int(11) DEFAULT NULL, `title` text, `description` text, `link` text, `date` datetime DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), KEY `date_INDEX_idx` (`date`), KEY `member_id_idx` (`member_id`), KEY `member_id_date_idx` (`member_id`,`date`), CONSTRAINT `blog_rss_cache_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8
インストール後
$ mysql -u root -p example_com -e 'show create table blog_rss_cache\G' Enter password: *************************** 1. row *************************** Table: blog_rss_cache Create Table: CREATE TABLE `blog_rss_cache` ( `id` int(11) NOT NULL AUTO_INCREMENT, `member_id` int(11) DEFAULT NULL, `title` text, `description` text, `link` text, `date` datetime DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), KEY `date_INDEX_idx` (`date`), KEY `member_id_date_idx` (`member_id`,`date`), KEY `member_id_idx` (`member_id`), CONSTRAINT `blog_rss_cache_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8
Mutsumi Imamura さんがほぼ11年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
動作確認OKです。
OpenPNE3.6.13-devにて動作確認しました。
操作