Bug(バグ) #3473
opBlogPlugin を使用しているメンバーが退会しようとすると500エラーとなる
Start date:
2013-10-25
Due date:
% Done:
100%
3.6 で発生するか:
Unknown (未調査)
[QA]バグ通知済:
No
3.8 で発生するか:
Unknown (未調査)
Description
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
の記述を追加し、それに伴うマイグレーションスクリプトを追加する。
History
#1 Updated by Youichi Kimura almost 11 years ago
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
Pull Request 送りました
https://github.com/tejimaya/opBlogPlugin/pull/1
#2 Updated by Mutsumi Imamura almost 11 years ago
- Target version set to v1.0.3
#3 Updated by Yuya Watanabe almost 11 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 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
#4 Updated by Mutsumi Imamura almost 11 years ago
- Status changed from Pending Testing(テスト待ち) to Fixed(完了)
- % Done changed from 70 to 100
動作確認OKです。
OpenPNE3.6.13-devにて動作確認しました。