首页
学习
活动
专区
圈层
工具
发布

多对多
EN

Stack Overflow用户
提问于 2013-12-23 08:50:34
回答 1查看 1.1K关注 0票数 1

通常我用一对多的方式解决了很多案件:第一--<第二>--第三。代码的实现就像在本教程中所描述的那样:http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html和一切都像魅力一样工作。

ORM设计者提供了一种简单的方法来建立多到多的关系,我决定尝试一下。

ORM设计器以下列方式创建了我的实体:

产品实体:

代码语言:javascript
复制
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;

<....>
}

在数据库中,如下所示:

代码语言:javascript
复制
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 ;

成员实体:

代码语言:javascript
复制
class Memberships{
/** 
 * @ORM\ManyToMany(targetEntity="Crm\StockBundle\Entity\Product", mappedBy="Products", cascade={"all"})
 */
private $Membershipses;

}

在数据库中,如下所示:

代码语言:javascript
复制
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表没有实体符号,该表仍然是在数据库中生成的:

代码语言:javascript
复制
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的控制台应用程序自动生成表单,结果是:

代码语言:javascript
复制
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name')
        ->add('comembers')
        ->add('Membershipses')
        ->add('Save','submit')
    ;
}

表单本身就是工作的创意,产品按字段“Membership”(按字段“Membership”)显示,成员数据保存到数据库。但是“MembershipsHasProduct”表在数据库中没有任何数据。

我想我有一些“特殊”的事情要做,为了让这个表格充满成员关系数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-23 15:59:06

您需要实现如下所示的添加方法:

代码语言:javascript
复制
/**
 * {@inheritDoc}
 */
public function addMembership($membership)
{
    if (!$this->getMemberhips()->contains($membership)) {

        $this->getMemberhips()->add($membership);
        $membership->addProduct($this);

    }

    return $this;
}

并在构造函数上启动成员集合:

代码语言:javascript
复制
public function _construct(){
 $this->memberships = new ArrayCollection();

}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20739964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档