2014-09-20 2 views
0

중간 테이블에있을 때 마지막으로 할당 된 값을 설정하는 방법 :그것이 내가이 분야에 양식을 가지고

class OrdersType extends AbstractType { 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     // Others form fields 

     if ($options['curr_action'] !== NULL) 
     { 
      $builder 
        ->add('status', 'entity', array(
         'class' => 'CommonBundle:OrderStatus', 
         'property' => 'name', 
         'required' => TRUE, 
         'label' => FALSE, 
         'mapped' => FALSE 
      )); 
     } 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setRequired(array(
      'register_type' 
     )); 

     $resolver->setOptional(array(
      'curr_action' 
     )); 

     $resolver->setDefaults(array(
      'data_class' => 'Tanane\FrontendBundle\Entity\Orders', 
      'render_fieldset' => FALSE, 
      'show_legend' => FALSE, 
      'intention' => 'orders_form' 
     )); 
    } 

    public function getName() 
    { 
     return 'orders'; 
    } 

} 

그리고이 엔티티가 :

class OrderHasStatus { 
    use IdentifiedAutogeneratedEntityTrait; 

    /** 
    * Hook timestampable behavior 
    * updates createdAt, updatedAt fields 
    */ 
    use TimestampableEntity; 

    /** 
    * @ORM\ManyToOne(targetEntity="\Tanane\FrontendBundle\Entity\Orders") 
    * @ORM\JoinColumn(name="general_orders_id", referencedColumnName="id") 
    */ 
    protected $order; 

    /** 
    * @ORM\ManyToOne(targetEntity="\Tanane\CommonBundle\Entity\OrderStatus") 
    * @ORM\JoinColumn(name="status_id", referencedColumnName="id") 
    */ 
    protected $status; 

    public function setOrder(\Tanane\FrontendBundle\Entity\Orders $order) 
    { 
     $this->order = $order; 
    } 

    public function getOrder() 
    { 
     return $this->order; 
    } 

    public function setStatus(\Tanane\CommonBundle\Entity\OrderStatus $status) 
    { 
     $this->status = $status; 
    } 

    public function getStatus() 
    { 
     return $this->status; 
    } 

} 

나는 최신 상태를 저장 주문에 따라 다름. 주문을 편집하거나 표시 할 때이 상태를 양식에 설정해야하지만이를 달성하는 방법을 알지 못해 어떤 도움을 줄 수 있습니까?

답변

1

따라서이 내용은 your other question concerning n:m relationships과 관련되어 보입니다. 다 대다 관계가 있지만 세 엔티티가없는 경우 기존 솔루션이 작동 할 수 있습니다.

나는 솔루션과 유사하다 생각 :

OrdersType

$builder->add('orderHasStatus', 'collection', array(
    'type' => new OrderHasStatusType(), 
    'allow_add' => true, 
    'allow_delete' => true 
)); 

OrderHasStatusType

$builder->add('status', 'collection', array(
    'type' => new StatusType(), 
    'allow_add' => true, 
    'allow_delete' => true 
)); 

StatusType

$builder->add('status', 'entity', array(
    'class' => 'CommonBundle:Status' 
)); 

스키마가^인 경우 OrdersType에는 상태 자체가 포함 된 StatusTypes가있는 OrderHasStatus 유형의 컬렉션이 있어야합니다.

^내가 한 가지 질문 할 것이고 아마도 내 다른 대답에 있어야 할 것입니다. 귀하의 스키마가 올바른지 여부입니다. 각 주문에 여러 개의 상태가 필요합니까? 그렇지 않다면, 당신이 정말로 원하는 것은 Order와 Status 사이의 Many-to-One이다. 이것은 OrderHasStatus 중간 계층을 제거 할 것이다. OrderHasStatus (타임 스탬프?)에 대한 추가 데이터가 필요하면 Order 테이블에 해당 정보를 넣을 수 있습니다. 그러나 여러 상태가 필요하거나 Orders 테이블과 별도의 추가 데이터를 유지하려는 경우 (Orders 및 OrderHasStatus가 실제로 일대일 인 경우), 괜찮습니다.