Bug(バグ) #3738
Youichi Kimura さんがほぼ10年前に更新
h3. Overview (現象) メンバーのプロフィール画像やコミュニティ画像などの file テーブルを介して格納される画像について、ブラウザ上で画像を変更・削除しても対応する file, file_bin レコードがデータベース上に残ったまま削除されない。 削除されずに残った画像は管理画面のアップロード画像リスト (@/pc_backend.php/monitoring@) からも確認できる。 対象となるテーブル: * OpenPNE コア ** activity_image ** banner_image ** community ** member_image (#3375) ** oauth_consumer * 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 h3. Causes (原因) <pre><code class="yaml"> 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 } </code></pre> 例えば上記の様な DB スキーマの定義があったとき、外部キー制約があるため file のレコードが削除されると対応する hoge_image のレコードが削除されるが、逆に hoge_image のレコードが削除されても file のレコードは削除されない。そのため hoge_image のレコードを削除する際に対応する file のレコードを別途削除する必要がある。 h3. Way to fix (修正内容) <pre><code class="php"> class HogeImage extends BaseHogeImage { public function postDelete($event) postDelete() { $this->File->delete(); } } </code></pre> File を参照するモデルのクラスに @postDelete()@ メソッドを定義し、その中で @$this->File->delete();@ を実行することで関連する file テーブルのレコードも削除されるようになる。