プロジェクト

全般

プロフィール

Backport(バックポート) #1475

完了

error at the application cascading of doctrine.(Doctrineのカスケーディングデリート 時にエラーになる)

Masato Nagasawa さんが14年以上前に追加. 13年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2010-08-03
期日:
進捗率:

100%

予定工数:

説明

Overview (現象)

Doctrine側でカスケーディングデリートを有効にした場合、日記を削除しようとするとエラーになります。

Causes (原因)

lib/behavior/opApplicationLevelCascadingListener.class.php の 32行目でエラーになっており、
$record が空の配列であるにも関わらずdelete()を呼んでいてメソッドが解決できずエラーとなっています。

Way to fix (修正内容)

$relations が Doctrine_Collection でない場合に array($relations) としているのが原因で、
この場合、$relationsが空の配列であった場合に要素数が1となってしまい、foreach で空の $record を処理してしまいます。

 22       if (!($relations instanceof Doctrine_Collection))
 23       {
 24         $relations = array($relations);
 25       }

以下のようにして配列の要素数が0であった場合、continue するように対処するのが良いのではと思います。

 22       if (!($relations instanceof Doctrine_Collection))
 23       {
            if (!count($relations))
            {
              continue;
            }
 24         $relations = array($relations);
 25       }


関連するチケット 3 (0件未完了3件完了)

関連している OpenPNE 3 - Backport(バックポート) #1471: error at the application cascading of doctrine.(Doctrineのカスケーディングデリート 時にエラーになる)Fixed(完了)Masato Nagasawa2010-08-03

操作
関連している OpenPNE 3 - Backport(バックポート) #1501: error at the application cascading of doctrine.(Doctrineのカスケーディングデリート 時にエラーになる)Invalid(無効)Masato Nagasawa2010-08-03

操作
関連している OpenPNE 3 - Bug(バグ) #1502: error at the application cascading of doctrine.(Doctrineのカスケーディングデリート 時にエラーになる)Fixed(完了)Masato Nagasawa2010-08-03

操作

Masato Nagasawa さんが14年以上前に更新

  • 対象バージョンOpenPNE 3.7.0 から OpenPNE 3.6beta4 に変更

Masato Nagasawa さんが14年以上前に更新

  • 題名Doctrineのカスケーディングデリート 時にエラーになる から error at the application cascading of doctrine.(Doctrineのカスケーディングデリート 時にエラーになる) に変更
  • 担当者Masato Nagasawa にセット

Masato Nagasawa さんが14年以上前に更新

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

更新履歴 d043ed7c6fe4bbca28332114478e622cf2815bfd で適用されました。

Masato Nagasawa さんが14年以上前に更新

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

この対応では不十分でした。
delete()が定義されていないものが来るケースがあるようです。(画像添付された日記を削除するときにエラーになる)
以下のようにしてインスタンスが Doctrine_Record かどうか判定する処理を追加します。

           case 'cascade':
             if($record instanceof Doctrine_Record)
             {
               $record->delete();
             }
           break;

Masato Nagasawa さんが約14年前に更新

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

更新履歴 424840da85156873e46a627ed4cb2279a52f54d0 で適用されました。

Rimpei Ogawa さんが約14年前に更新

  • 3.6 で発生するかYes にセット

Masato Nagasawa さんが約14年前に更新

更新履歴 a739822932dbe2eec35a73c2bb0751ad6cc345a1 で適用されました。

Hiroki Mogi さんが約14年前に更新

テストを行ないました。正常に動作していました。

Kousuke Ebihara さんが約14年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

Kousuke Ebihara さんが約14年前に更新

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

isao sano さんが13年以上前に更新

  • トラッカーBug(バグ) から Backport(バックポート) に変更

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