プロジェクト

全般

プロフィール

Bug(バグ) #3473

opBlogPlugin を使用しているメンバーが退会しようとすると500エラーとなる

Youichi Kimura10年以上前に追加. 10年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
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 の記述を追加し、それに伴うマイグレーションスクリプトを追加する。

履歴

#1 Youichi Kimura10年以上前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

#2 Mutsumi Imamura10年以上前に更新

  • 対象バージョンv1.0.3 にセット

#3 Yuya Watanabe10年以上前に更新

  • ステータス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

#4 Mutsumi Imamura10年以上前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

動作確認OKです。
OpenPNE3.6.13-devにて動作確認しました。

他の形式にエクスポート: Atom PDF