我在两个实体之间有这个映射:
class Orders {
// Other attributes
/**
* @ORM\OneToMany(targetEntity="OrderHasProduct", mappedBy="order")
*/
protected $orderProducts;
// Other set/get methods
public function getOrderProducts()
{
return $this->orderProducts;
}
}
class Product {
// Other attributes
/**
* @ORM\OneToMany(targetEntity="\Tanane\FrontendBundle\Entity\OrderHasProduct", mappedBy="product")
*/
protected $orderProducts;
// Other set/get methods
public function getOrderProducts()
{
return $this->orderProducts;
}
}
当然,由于许多订单可以有许多产品,但还有一个额外的属性,需要这个其他实体:
class OrderHasProduct
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="\Tanane\FrontendBundle\Entity\Orders")
* @ORM\JoinColumn(name="general_orders_id", referencedColumnName="id")
*/
protected $order;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="\Tanane\ProductBundle\Entity\Product")
* @ORM\JoinColumn(name="product_id", referencedColumnName="id")
*/
protected $product;
/**
* @ORM\Column(type="integer", nullable=false)
*/
protected $amount;
public function setOrder(\Tanane\FrontendBundle\Entity\Orders $order)
{
$this->order = $order;
}
public function getOrder()
{
return $this->order;
}
public function setProduct(\Tanane\ProductBundle\Entity\Product $product)
{
$this->product = $product;
}
public function getProduct()
{
return $this->product;
}
public function setAmount($amount)
{
$this->amount = $amount;
}
public function getAmount()
{
return $this->amount;
}
}
当我编辑订单时,我应该能够在该订单上添加/删除产品,但我不知道如何实现这一点。我知道我必须使用表单集合,但是如何使用呢?我的意思是一个集合应该嵌入如下:
$builder->add('product', 'collection', array(
'type' => new OrderHasProductType(),
'allow_add' => true,
'allow_delete' => true
));
当我应该创建一个新OrderHasProductType
表单时,我想我已经明白了,但我现在的问题是,订单的 ID 会发生什么变化?处理带有额外参数的关系 n:m 的嵌入表单的正确方法是什么?
任何人都可以给我一些代码示例来订购我的想法吗?
额外资源