2014-11-22 4 views
0

왜 cakephp는 saveAll 및 deleteAll 후에 beforeSave() 및 beforeDelete()와 같은 콜백이 없습니까? 나는 cakephp가 deleteAll()과 saveAll (기본 delete() 및 save() 함수 사용)에 foreach를 사용한다는 것을 알고 있습니다. 하지만 save() 함수가 실행될 때마다 매번 실행되므로 afterSave(), beforeSave()와 같은 함수를 설정하면 너무 많은 쿼리를 사용하지 않습니다.Cakephp 삭제 후 모두

cakephp가 saveAll(), deleteAll()에 별도의 기능을 요구하지 않습니까? 틀 렸으면 고쳐줘.

답변

1

이미 말씀 드렸듯이 saveAll 및 deleteAll은 기본적으로 save()delete() 주위의 래퍼입니다. 따라서 데이터 행마다 저장 또는 삭제가 beforeSave()beforeDelete()이됩니다. 따라서 별도의 beforeSaveAll과 beforeDeleteAll을 추가하는 것은 실제로 필요하지 않습니다. 예, 많은 쿼리를 실행할 수 있지만 문제는 아닙니다. 하나의 대량 작업을 수행하는 것보다 저장되거나 삭제되는 모든 데이터 행을 몰드 할 수있는 방법을 제공합니다 (하나의 작업으로 묶을 때 서로 의존하기 때문에).

당신은 마다 시려면 및 deleteAll 행동 (즉, 당신이 실제로 원하는 것을 매우 확인을 사용자 정의 로직을 추가! 그리고 당신은 콜백에서 해제하지 않는 한 정기를 BeforeSave와 beforeDelete 여전히 호출 될 것을 기억하고 싶을 경우 각 saveAll 및 deleteAll)을 사용하면 자신의 implent가있는 메소드를 AppModel에 겹쳐 쓰고 다음과 같이 사용자 정의 "이전"로직을 호출 할 수 있습니다.

// Add your own custom deleteAll and saveAll to AppModel 
public function deleteAll($conditions, $cascade = true, $callbacks = false) { 
    if ($this->beforeDeleteAll($conditions)) { 
     parent::deleteAll($conditions, $cascade, $callbacks); 
    } else { 
     return false; 
    } 
} 

public function saveAll($data = array(), $options = array()) { 
    if ($this->beforeSaveAll($data, $options)) { 
     parent::saveAll($data, $options); 
    } else { 
     return false; 
    } 
} 

// As well as your custom logic 
public function beforeDeleteAll($conditions) { 
    // Do your stuff here 
    return true; 
} 

public function beforeSaveAll($data, $options) { 
    // Do your stuff here 
    return true; 
}