通常我用一对多的方式解决了很多案件:第一--<第二>--第三。代码的实现就像在本教程中所描述的那样:http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html和一切都像魅力一样工作。
ORM设计者提供了一种简单的方法来建立多到多的关系,我决定尝试一下。
ORM设计器以下列方式创建了我的实体:
产品实体:
class Product {
<....>
/**
* @ORM\ManyToMany(targetEntity="Crm\AdminBundle\Entity\Memberships", inversedBy="Membershipses")
* @ORM\JoinTable(
* name="MembershipsHasProduct",
* joinColumns={@ORM\JoinColumn(name="Product_id", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="Memberships_id", referencedColumnName="id", nullable=false)}
* )
*/
private $Products;
<....>
}在数据库中,如下所示:
CREATE TABLE IF NOT EXISTS `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int(11) NOT NULL,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`eanCode` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`productCode` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` longtext COLLATE utf8_unicode_ci,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`notes` longtext COLLATE utf8_unicode_ci,
`createdTime` datetime NOT NULL,
`virtual` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_D34A04AD12469DE2` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;成员实体:
class Memberships{
/**
* @ORM\ManyToMany(targetEntity="Crm\StockBundle\Entity\Product", mappedBy="Products", cascade={"all"})
*/
private $Membershipses;
}在数据库中,如下所示:
CREATE TABLE IF NOT EXISTS `memberships` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`comembers` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;MembershipsHasProduct表没有实体符号,该表仍然是在数据库中生成的:
CREATE TABLE IF NOT EXISTS `membershipshasproduct` (
`Product_id` int(11) NOT NULL,
`Memberships_id` int(11) NOT NULL,
PRIMARY KEY (`Product_id`,`Memberships_id`),
KEY `IDX_7FF740F6AD9658A` (`Product_id`),
KEY `IDX_7FF740F6CFDFC8A4` (`Memberships_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;我使用Symfony的控制台应用程序自动生成表单,结果是:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('comembers')
->add('Membershipses')
->add('Save','submit')
;
}表单本身就是工作的创意,产品按字段“Membership”(按字段“Membership”)显示,成员数据保存到数据库。但是“MembershipsHasProduct”表在数据库中没有任何数据。
我想我有一些“特殊”的事情要做,为了让这个表格充满成员关系数据?
发布于 2013-12-23 15:59:06
您需要实现如下所示的添加方法:
/**
* {@inheritDoc}
*/
public function addMembership($membership)
{
if (!$this->getMemberhips()->contains($membership)) {
$this->getMemberhips()->add($membership);
$membership->addProduct($this);
}
return $this;
}并在构造函数上启动成员集合:
public function _construct(){
$this->memberships = new ArrayCollection();
}https://stackoverflow.com/questions/20739964
复制相似问题