2014-09-20 23 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需要包含一個OrderHasStatus類型的集合,它們本身具有包含狀態本身的StatusTypes。

^我想查詢的一件事,也許應該在我的其他答案中,是你的模式是否正確 - 你需要每個訂單有多個狀態?如果沒有,那麼你真正想要的是一個多對一的訂單和狀態,這將刪除中間OrderHasStatus圖層。如果您需要關於OrderHasStatus的額外數據(時間戳?),那麼您可以將該信息放在訂單表上。但是,如果您需要多個狀態,或者希望將額外的數據與Orders表分開(在這種情況下,Orders和OrderHasStatus實際上是一對一的),那就好了。

相關問題