Обычно я решал много-много случаев способом один-к-одному-к-одному: first - < second> - third. Код реализован, как описано в этом учебнике: http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html и все работает как шарм.Symfony many-to-many
ORM Designer предлагает и простой способ генерации отношений «многие ко многим», и я решил попробовать.
Мои объекты создаются ORM Designer в следующим образом:
Products Entity:
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 таблица не имеет сущность Symfony, до сих пор эта таблица создается в базе данных:
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')
;
}
форма сама по себе работает Creat, продукция представлена в списке выбора (на поле «Membershipses») и членство данные сохраняются в базе данных. Но таблица «MembershipsHasProduct» не получает никаких данных в базе данных.
Я предполагаю, что у меня есть что-то особенное, чтобы получить эту таблицу, заполненную данными о соотношении членства и продукта?
Было бы полезно знать, как структурирован продукт с точки зрения атрибутов (как выглядит таблица продуктов в базе данных?). –
Вы имеете в виду необработанный дамп базы данных или файл сущности symfony? – Kpihus
Я имею в виду, например, то же, что и для таблицы принадлежности. SQL-оператор, который используется для создания этой таблицы. –