Model Callback beforeDelete

前端 未结 2 1646
慢半拍i
慢半拍i 2021-01-16 02:27

I\'m trying to delete images when deleting the container of those images with a cascading model::delete

The cascading works fine, but I can\'t get the model call bac

相关标签:
2条回答
  • 2021-01-16 02:59

    If the models are related with hasMany/hasOne, both RelatedImage::beforeDelete() and RelatedImage::afterDelete() should be called when they are removed. Try putting the delete logic there instead?

    0 讨论(0)
  • 2021-01-16 03:10

    I would do it in this way:

    in beforeDelete get the images data

    function beforeDelete(){
      $relatedImages = $this->RelatedImage->find('all', array('conditions' => array('RelatedImage.container_id' => 'containerId')));
      $this->relatedImages = $relatedImages;
      $this->currentId = $this->id; //I am not sure if this is necessary
      return true;
    }
    

    then in the afterDelete() as Oscar suggest do the actual delete of the image:

    function afterDelete(){
      $relatedImages = $this->relatedImages;
      $containerId = $this->currentId; //probably this could be just $this->id;
      foreach ($relatedImages as $image) {
            $myFile = WWW_ROOT . 'image' . $containerId . '_i' . $image['RelatedImage']['id']  . '.jpg';
            unlink($myFile);
            $myThumb = WWW_ROOT . 'img/' . $image['RelatedImage']['thumbnail'];
            unlink($myThumb);
        }
    }
    

    this way you are save, even if the model fail to delete the record you will delete images only if the delete was actually happen.

    HTH

    0 讨论(0)
提交回复
热议问题