奏鸣曲创建了两个实体,但没有关联它们

时间:2014-08-11 13:26:18

标签: php forms symfony

在奏鸣曲管理员中,我建立了呈现特征形式的产品形式。我的数据库中的关系是:

  

ProductFeatures:FeaturesValues 1:n

     

产品:FeaturesValues 1:n

class ProductAdmin extends Admin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
       $formMapper
         ->add('name')
         ->add('featureValues','collection', array(
                    'mapped' => true,
                    'type' => new \Bundle\Form\FeatureValueType(),
                    'allow_add' => true,
                ));
    }
}

FeatureValueType:

class FeatureValueType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('productFeature') 
            ->add('value')
        ;
    }

功能值表单呈现功能,因此新功能值自动与功能相关联。问题是当我尝试以产品形式提交后,我获得新产品,我获得与功能相关的新功能值,但产品与功能值无关(product_feature_value表中的product_id是空的)。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

我会假设你的班级有这样的东西。

// ...
use Doctrine\Common\Collections\ArrayCollection;

class Product
{
  // ...

  /**
   * @ORM\OneToMany(targetEntity="FeatureValue", mappedBy="product", cascade={"persist"})
   */
  protected $featureValues;

  public function __construct() {
      $this->featureValues = new ArrayCollection();
  }
  // ...
  /**
   * Add products
   *
   * @param Path\To\Entity\FeatureValue $featureValues
   * @return Product
   */
   public function addFeatureValue(\Path\To\Entity\FeatureValues $feauteValues)
   {
      $featureValues->setProduct($this);
      $this->featureValues[] = $featureValues;

      return $this;
   }
}

class FeatureValue
{
  // ...

  /**
   * @ORM\ManyToOne(targetEntity="Product", inversedBy="featureValues")
   */
  protected $product;
}

这样您只需添加新的Product即可更新FeatureValue类。由于方法addFeatureValue()的工作方式,它会自动连接这两个项目,如果您要更新的FeatureValue项目中添加了新的Product项目,它将自动保留到数据库,因为你在关系规则中这么说。