2013-08-08 8 views
1

everyone!onDelete와 연결된 엔티티 : CASCADE 옵션과 둘 다 소프트 삭제 가능하지 않음

내가 캐스케이드이 연관된 엔티티 (사용자, 사진) = "제거"옵션을 모두 내가 사용자를 삭제 softdelete을 사용하면 사진 deleted.and했다 놓아야합니다

소프트 삭제 가능한 지금이 아니라이 일.

softdelete없이 모든 것이 완벽하게 작동합니다.

누구든지이 문제를 해결할 수 있습니까?

내 코드 :

Picture.orm.yml

Leo\TestBundle\Entity\Picture: 
type: entity 
repositoryClass: Leo\TestBundle\Entity\PictureRepository 
table: null 
manyToOne: 
    user: 
     targetEntity: User 
     inversedBy: pictures 
     joinColumn: 
      name: user_id 
      referencedColumnName: id 
      onDelete: CASCADE 
gedmo: 
    soft_deleteable: 
     field_name: deletedAt 
fields: 
    id: 
     type: integer 
     id: true 
     generator: 
      strategy: AUTO 
    name: 
     type: string 
     length: 255 
    path: 
     type: string 
     length: 255 
    deletedAt: 
     type: datetime 
     nullable: true 

User.orm.yml :

Leo\TestBundle\Entity\User: 
type: entity 
table: null 
repositoryClass: Leo\TestBundle\Entity\UserRepository 
oneToMany: 
    pictures: 
     targetEntity: Picture 
     mappedBy: user 
gedmo: 
    soft_deleteable: 
     field_name: deletedAt 
fields: 
    id: 
     type: integer 
     id: true 
     generator: 
      strategy: AUTO 
    username: 
     type: string 
     length: 255 
    email: 
     type: string 
     length: 255 
    password: 
     type: string 
     length: 255 
    sex: 
     type: integer 
    bloodtype: 
     type: string 
     length: 10 
    birthday: 
     type: date 
    pr: 
     type: text 
    salt: 
     type: string 
     length: 255 
    deletedAt: 
     type: datetime 
     nullable: true 
lifecycleCallbacks: { } 

응용 프로그램/설정/config.yml

doctrine: 
    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     auto_mapping: true 
     filters: 
      softdeleteable: 
       class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter 
       enabled: true 

액션

public function deleteAction() 
{ 
    $token = $this->getRequest()->get('token'); 
    if (! $this->get('form.csrf_provider')->isCsrfTokenValid('user_list', $token)) { 
     //TODO use setFlashBag 
     $this->get('session')->setFlash('notice', 'Woops! Token invalid!'); 
     return $this->redirect('user_list'); 
    } 
    //$em = $this->getDoctrine()->getEntityManager(); 
    $em = $this->getDoctrine()->getManager(); 
    $user = $this->getUser(); 
    $pictures = $user->getPictures(); 
    $em->remove($user); 
    /* foreach($pictures as $p){ 
     unlink($p->getAbsolutePath()); 
    } */ 
    $em->flush(); 
    $this->get('security.context')->setToken(null); 
    $this->getRequest() 
     ->getSession() 
     ->invalidate(); 
    return $this->redirect($this->generateUrl('leo_test_homepage')); 
} 

`

+0

는 캐스케이드 옵션은 데이터베이스에 존재인가? –

+0

아니요! 용서하십시오, 나는 당신의 평균이 무엇인지를 정말로 이해하지 못합니다 .. –

+0

코드에 코드를 추가하는 것만으로는 충분하지 않습니다. doctrine : schema : update --force 명령을 실행 했습니까? 아니면 수동으로 데이터베이스에 캐스케이드를 추가 했습니까? –

답변

4

OK, 문제는 결국 out.Is 내 부주의를 발견했다.

Leo\TestBundle\Entity\Picture: 
type: entity 
repositoryClass: Leo\TestBundle\Entity\PictureRepository 
table: null 
manyToOne: 
    user: 
     targetEntity: User 
     inversedBy: pictures 
     joinColumn: 
      name: user_id 
      referencedColumnName: id 
      #**Comment out the line of code** 
      #onDelete: CASCADE 
gedmo: 
    soft_deleteable: 
     field_name: deletedAt 

사용자 엔티티

Leo\TestBundle\Entity\User: 
type: entity 
table: null 
repositoryClass: Leo\TestBundle\Entity\UserRepository 
oneToMany: 
    pictures: 
     targetEntity: Picture 
     mappedBy: user 
     # add cascade option here 
     cascade: [persist, remove] 
gedmo: 
    soft_deleteable: 
     field_name: deletedAt 
+0

질문에 답변 해 주셔서 고맙습니다. 다른 사람들에게 도움이됩니다. :) 사람들이 "신경 쓰지 마라."라고 말할 때 나는 싫어합니다. :) – Jessica