2012-08-16 3 views
1

웹 서비스에서 게임 세션을 삭제하기 위해 다음 컨트롤러를 정의했습니다.모든 레코드가 삭제되는 이유는 무엇입니까?

하나의 세션 엔티티가 삭제 될 것으로 예상됩니다. 대신 모든 레코드가 데이터베이스에서 삭제됩니다.

SessionController.php 

/** 
* @Route("/{id}/") 
* @Method({"DELETE"}) 
*/ 
public function deleteAction($id) 
{ 
    $repository = $this->getSessionRepository(); 
    $session = $repository->find($id); 

    $em = $this->getEntityManager(); 
    $em->remove($session); 
    $em->flush(); 

    return new Response('', 200); 
} 

services.yml에는 다음이 포함

sh.repository.session: 
    class: ScavengerWebserviceBundle\Entity\SessionRepository 
    factory_service: doctrine.orm.default_entity_manager 
    factory_method: getRepository 
    arguments: 
     - 'ScavengerWebserviceBundle:Session' 
/** 
* @return \Scavenger\WebserviceBundle\Entity\SessionRepository 
*/ 
private function getSessionRepository() 
{ 
    return $this->container->get('sh.repository.session'); 
} 

기업은 포함 : 당신이 발견 ($ 아이디)를 통해 호출

<?php 

namespace Scavenger\WebserviceBundle\Entity; 

use Scavenger\WebserviceBundle\Entity\Battlezone; 

use Doctrine\ORM\Mapping as ORM; 
use \Doctrine\ORM\Mapping\OneToOne; 
use \Doctrine\ORM\Mapping\ManyToMany; 
use \Doctrine\ORM\Mapping\JoinTable; 
use \Doctrine\ORM\Mapping\JoinColumn; 

/** 
* Scavenger\WebserviceBundle\Entity\Session 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Scavenger\WebserviceBundle\Entity\SessionRepository") 
*/ 
class Session 
{ 

    const SESSION_ACTIVE = 0; //lol 

    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string $name 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 

    /** 
    * @var integer $mrX 
    * 
    * @ORM\Column(name="mrX", type="integer") 
    */ 
    private $mrX; 


    /** 
    * @var integer $causer 
    * 
    * @ORM\Column(name="causer", type="integer") 
    */ 
    private $causer = 0; 


    /** 
    * @var integer $statusCode 
    * 
    * @ORM\Column(name="status_code", type="integer", nullable=false) 
    */ 
    private $statusCode = self::SESSION_ACTIVE; 


    /** 
    * @ManyToMany(targetEntity="Scavenger\WebserviceBundle\Entity\User", mappedBy="sessions", cascade={"all"}) 
    */ 
    private $users; 

    /** 
    * @OneToOne(targetEntity="Scavenger\WebserviceBundle\Entity\Battlezone", cascade={"all"}) 
    * @JoinColumn(name="battlezone_id", referencedColumnName="id") 
    */ 
    private $battlezone; 

    /** 
    * @var integer 
    * @ORM\Column(name="start", type="integer") 
    */ 
    private $start = 0; 

    /** 
    * @var integer 
    * @ORM\Column(name="end", type="integer") 
    */ 
    private $end = 0; 


    //a bunch of setters and getters ... 
} 

답변

1

$ 사용자 필드에 "cascade = all"을 설정했기 때문입니다. 사용자 엔티티의 "세션"필드에도 동일한 단계가 있으므로 모든 세션 개체를 제거하면 해당 개체와 관련된 모든 사용자도 제거되고 해당 사용자와 관련된 모든 세션 개체도 제거됩니다.

0

, 그것은 전체 데이터를 가리키는 객체라고 저장하는 반면 개체가 가리키는 데이터 저장소의 내부 엔티티 1 개로만 제한되어야합니다.

가능한 경우 model에 'unsetData'를 만듭니다.

이것은 참조 용입니다. 나는이 코드를 시도하지 않았지만, 그렇지 않다면, 이미 경로를 알고 있거나 그렇지 않다면, 주석을 되돌리고 정렬 할 것이다!

관련 문제