在奏鸣曲管理员中,我建立了呈现特征形式的产品形式。我的数据库中的关系是:
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是空的)。
我错过了什么?
答案 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
项目,它将自动保留到数据库,因为你在关系规则中这么说。