2014-06-24 70 views
1

我有實體:爲什麼在多重設置爲false時,Doctrine不會保存實體?

<?php 

namespace BW\BlogBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* PostCustomField 
* 
* @ORM\Table(name="post_custom_field") 
* @ORM\Entity(repositoryClass="BW\BlogBundle\Entity\PostCustomFieldRepository") 
*/ 
class PostCustomField 
{ 
    /** 
    * @var ArrayCollection 
    * 
    * @ORM\ManyToMany(targetEntity="BW\BlogBundle\Entity\CustomFieldProperty", inversedBy="postCustomFields") 
    */ 
    private $customFieldProperties; 


    public function __construct() 
    { 
     $this->customFieldProperties = new ArrayCollection(); 
    } 


    /** 
    * Add customFieldProperties 
    * 
    * @param \BW\BlogBundle\Entity\CustomFieldProperty $customFieldProperties 
    * @return PostCustomField 
    */ 
    public function addCustomFieldProperty(\BW\BlogBundle\Entity\CustomFieldProperty $customFieldProperties) 
    { 
     $this->customFieldProperties[] = $customFieldProperties; 

     return $this; 
    } 

    /** 
    * Remove customFieldProperties 
    * 
    * @param \BW\BlogBundle\Entity\CustomFieldProperty $customFieldProperties 
    */ 
    public function removeCustomFieldProperty(\BW\BlogBundle\Entity\CustomFieldProperty $customFieldProperties) 
    { 
     $this->customFieldProperties->removeElement($customFieldProperties); 
    } 

    /** 
    * Get customFieldProperties 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getCustomFieldProperties() 
    { 
     return $this->customFieldProperties; 
    } 

,並有表單類型:

<?php 

namespace BW\BlogBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class PostCustomFieldType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
     ->add('customFieldProperties', 'entity', array(
      'class' => 'BW\BlogBundle\Entity\CustomFieldProperty', 
      'property' => 'name', 
      'multiple' => true, 
      'expanded' => true, 
     )) 

而且它很好地工作複選框,但是當我嘗試使用單選按鈕(設置'multiple' => false,) - 這是使他們罰款,但是當我檢查,並設法實體保存到數據庫 - 我有一個錯誤:

Neither the property "customFieldProperties" nor one of the methods 
"addCustomFieldProperty()"/"removeCustomFieldProperty()", "setCustomFieldProperties()", 
"customFieldProperties()", "__set()" or "__call()" exist and have public access in class 
"BW\BlogBundle\Entity\PostCustomField". 

學說爲什麼不保存實體'multiple' => false

P.S. Symfony Standart Edition v2.5.0

+0

我覺得'ManyToMany'關係有問題,不是嗎?但是我需要這個屬性的'ManyToMany'關係。 –

+0

你有實體中的'customFieldProperties'屬性的getter/setter嗎? –

+0

@DebreczeniAndrás我有getter,而不是setter我有添加方法就像我上面的例子 –

回答

1

我和我自己的構建實體有同樣的問題,並找到了一個可能的解決方案,覆蓋here。基於

您的代碼,你應該添加的功能:

public function setCustomFieldProperties($customFieldProperties) 
{ 
    if (!is_array($customFieldProperties)) { 
     $customFieldProperties= array($customFieldProperties); 
    } 
    $this->customFieldProperties= $customFieldProperties; 
} 

這奏效了我。確實這似乎與ManyToMany關係有關:通過在formBuilder中將multiple值設置爲false,看起來我們不再處理Array(Collections)(您期望得到),並且必須將其轉換爲數組。

順便說一句:您的功能addCustomFieldProperty將不會再使用在這種情況下。

我認爲最好避免ManyToMany關係如果可能的話,但在我的情況下,我不得不保持選項打開,以允許多個實體用於以後的擴展。

相關問題