Bug(バグ) #3738
fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない
0%
Description
Overview (現象)¶
メンバーのプロフィール画像やコミュニティ画像などの file テーブルを介して格納される画像について、ブラウザ上で画像を変更・削除しても対応する file, file_bin レコードがデータベース上に残ったまま削除されない。
削除されずに残った画像は管理画面のアップロード画像リスト (/pc_backend.php/monitoring
) からも確認できる。
対象となるテーブル:
- OpenPNE コア
- opAlbumPlugin (#2447)
- album
- album_image
- opCommunityTopicPlugin (#2591)
- community_event_image
- community_event_comment_image
- community_topic_image
- community_topic_comment_image
- opDiaryPlugin (#106 修正済み)
- diary_image
- diary_comment_image
- opMessagePlugin (#190)
- message_file
Causes (原因)¶
HogeImage:
columns:
id: { type: integer(4), primary: true, autoincrement: true }
hoge_id: { type: integer(4), notnull: true }
file_id: { type: integer(4), notnull: true }
relations:
Hoge: { onDelete: cascade }
File: { onDelete: cascade }
例えば上記の様な DB スキーマの定義があったとき、外部キー制約があるため file のレコードが削除されると対応する hoge_image のレコードが削除されるが、逆に hoge_image のレコードが削除されても file のレコードは削除されない。そのため hoge_image のレコードを削除する際に対応する file のレコードを明示的に削除する必要がある。
Way to fix (修正内容)¶
HogeImage を削除する際に関連する File が削除されるようにする¶
class HogeImage extends BaseHogeImage
{
public function preDelete($event)
{
$this->File->delete();
}
}
File を参照するモデルのクラスに preDelete()
メソッドを定義し、その中で $this->File->delete();
を実行することで関連する file テーブルのレコードも削除されるようになる。
Hoge を削除する際に関連する HogeImage を明示的に削除する¶
hoge のレコードを削除した場合は、外部キー制約の ON DELETE CASCADE
によりそれを参照する hoge_image のレコードも削除される。しかしこれは DBMS 側で行われるもので Doctrine は関知しないため、削除時に HogeImage::preDelete()
は実行されない。
これでは Hoge の delete() メソッドを呼び出した場合には前述の修正に関わらず File から画像が削除されず残ってしまうため、Hoge::preDelete()
から $this->HogeImage->delete();
を明示的に呼び出す必要がある。
class Hoge extends BaseHoge
{
public function preDelete($event)
{
// HogeImage::preDelete() を実行させるために明示的に削除する
$this->HogeImage->delete();
}
}
Subtasks
Related issues
History
#1
Updated by Youichi Kimura over 7 years ago
- Description updated (diff)
#2
Updated by Youichi Kimura over 7 years ago
- Description updated (diff)
#3
Updated by Youichi Kimura over 7 years ago
- Description updated (diff)
#4
Updated by Youichi Kimura over 7 years ago
- Description updated (diff)
#5
Updated by Youichi Kimura over 7 years ago
- Related to Bug(バグ) #2447: アルバム・アルバム画像を削除しても画像ファイルが削除されていない added
#6
Updated by Youichi Kimura over 7 years ago
- Related to Bug(バグ) #3375: メンバーが退会しても、管理画面にメンバーのイメージ画像が残っている added
#7
Updated by Youichi Kimura over 7 years ago
- Related to Backport(バックポート) #2591: 画像が添付されたコミュニティトピックを削除しても、管理画面のアップロード画像リストに画像が残る added
#8
Updated by Youichi Kimura over 7 years ago
- Related to deleted (Bug(バグ) #3375: メンバーが退会しても、管理画面にメンバーのイメージ画像が残っている)
#9
Updated by Youichi Kimura over 7 years ago
- Description updated (diff)
#10
Updated by Youichi Kimura over 7 years ago
- Subject changed from fileテーブルを参照するテーブル(member_imageなど)の削除時に対応するfileレコードが削除されない to fileテーブルを参照するテーブル(activity_imageなど)の削除時に対応するfileレコードが削除されない
#11
Updated by Youichi Kimura over 7 years ago
- Status changed from New(新規) to Accepted(着手)
OpenPNEコア側の修正については下記Pull Requestにて進行中です。
https://github.com/openpne/OpenPNE3/pull/238
#12
Updated by Youichi Kimura over 7 years ago
- Description updated (diff)
#13
Updated by Youichi Kimura over 7 years ago
- Related to Bug(バグ) #190: メッセージを削除しても画像データが削除されていない added
#14
Updated by Youichi Kimura over 7 years ago
- Description updated (diff)
#15
Updated by Youichi Kimura over 7 years ago
- Subject changed from fileテーブルを参照するテーブル(activity_imageなど)の削除時に対応するfileレコードが削除されない to fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
#16
Updated by Chiharu Nakajima over 7 years ago
- Copied to Backport(バックポート) #3767: fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない added
#17
Updated by Chiharu Nakajima over 7 years ago
- Copied to Backport(バックポート) #3772: fileを参照するテーブル(activity_imageなど)のレコード削除時に対応するfileレコードが削除されない added
#18
Updated by Rimpei Ogawa over 7 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
#20
Updated by kaoru n over 5 years ago
- Status changed from Pending Testing(テスト待ち) to Won't fix(対応せず)
- Target version changed from OpenPNE 3.9.0-old to OpenPNE 3.9.0
- % Done changed from 70 to 0
OpenPNE 3.8.15 にて対応済みであったため、対応せずとします。