2017-11-13 9 views
1

새로운 항목을 데이터베이스에 추가하고 싶지만 이전 항목을 삭제하지 않을 때마다 양식을 제출하고 싶습니다.Symfony 2.8 : CollectionType - 오래된 항목을 지우지 마십시오.

일련 번호 컬렉션이 포함 된 인벤토리 엔티티가 있다고 가정 해 보겠습니다.

재고 양식 빌더

$builder 
    ->add('quantity', IntegerType::class) 
    ->add('inventorySerialNumbers', CollectionType::class, array(
     'entry_type' => InventorySerialNumberType::class, 
     'allow_add' => true, 
     'allow_delete' => false, 
     'by_reference' => false, 
    )) 
; 

재고 일련 번호 속성 :

/** 
* @var ArrayCollection 
* 
* @ORM\OneToMany(targetEntity="InventorySerialNumber", mappedBy="inventory", cascade={"persist"}) 
*/ 
protected $inventorySerialNumbers; 

그래서, 나는 새로운 목록을 만들려면 - 나는 quantity 2 inventorySerialNumbers 모든 데이터가 올바르게 추가되고 보내 . 그러나 항목을 하나 더 추가하려면 수량 1과 항목 1 개를 보내야합니다. 결과적으로 데이터베이스에 최신 항목이 하나만 저장됩니다.

심포니 엔티티를 추가하거나 수정합니다 cascade={"persist"}'allow_delete' => false

+0

안녕 : 불행하게도, 난 여기 당신이 봐야 두 recources을하는 심포니의 웹 사이트에 좋은 예를 찾을 수 있지만 없습니다! 지체 된 것에 대해 유감스럽게 생각합니다. 몇 시간의 연구 끝에 항목이 삭제되지 않고 새로운 항목으로 바뀌 었습니다. 저에게 적합한 해결책은 제출 될 때마다 항목의 완전한 콜렉션을 보내는 것입니다. –

+0

문제를 해결해 주셔서 감사합니다. 따라서 사용자가 새 항목을 추가하면 기존 항목과 병합됩니까? –

+0

불행히도 그렇습니다. 이전 항목을 새 항목으로 다시 작성하지 못하도록 양식을 제출할 때마다 항목을 계속 보관해야합니다./ –

답변

1

양식 조치를 무시하는 것 같다. 이 경우, 새 엔티티 (옵션 1)를 작성하거나 기존 엔티티 (옵션 2)를 수정하는 대신 엔티티를 겹쳐 쓰는 것입니다.

옵션 1 : Inventory을 추가합니다 추가 새 항목에만

만들기 a simple form. 사용자가 양식을 작성하고 새 Inventory을 작성합니다. 양식을 제출하면 데이터베이스에 두 개의 레코드가 생깁니다. 가지고있는 아이템의 수를 알고 싶다면 그 값을 합산해야합니다.

옵션 2 : 사용자가 항목

는 사용자가 일련 번호를 삭제하거나 수량을 낮출 수 있도록하려면

을 수정할 수 있도록, 당신은 editAction을 만들 havo 것이다.