Symfony 2.8 Doctrine. Использование композитного primary key и связь ManyToMany
Есть 2 сущности - Площадка (магазин) и Товар. В таблице с товарами композитный индекс - [Артикул + ID площадки]. Подразумевается, что один и тот же товар может быть размещен на разных площадках и одна и та же площадка может содержать множество товаров, соответственно связь - ManyToMany.
Сущность Площадка (Platform):
/**
* Platform
*
* @ORM\Table(name="Platforms")
*/
class Platform
{
/**
* @var int
*
* @ORM\Column(name="Platform_Id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Platform_Name", type="string", length=64)
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="Good", mappedBy="platforms", cascade={"ALL"}, indexBy="numpp")
*/
protected $goods;
public function __construct()
{
$this->goods = new ArrayCollection();
}
public function addGood($numpp)
{
$this->goods[$numpp] = new Good($numpp, $this);
}
Сущность Товар (Good):
/**
* Good
*
* @ORM\Table(name="Goods")
*/
class Good
{
/**
* @var string
*
* @ORM\Column(name="Numpp", type="string", length=6)
* @ORM\Id
*/
private $numpp;
/**
* @var int
*
* @ORM\ManyToMany(targetEntity="Platform", inversedBy="goods")
* @ORM\JoinColumn(name="Platform_Id", referencedColumnName="Platform_Id")
* @ORM\Id
*/
private $platforms;
public function __construct($numpp, Platform $platform)
{
$this->numpp = $numpp;
$this->platforms = new ArrayCollection();
$this->platforms[] = $platform;
}
В контроллере при создании новой связки Товар-Платформа...
$em = $this->getDoctrine()->getManager();
$platform = $em->getRepository("AGAAnalyticsBundle:Platform")->find(1);
$good = new Good('05062', $platform);
$em->persist($good);
$em->flush();
Получаю ошибку - Cannot insert the value NULL into column 'Platform_Id', table 'dbo.Goods'
Другим способом через addGood...
$em = $this->getDoctrine()->getManager();
$platform = $em->getRepository("AGAAnalyticsBundle:Platform")->find(1);
$platform->addGood('05062');
$em->flush();
Получаю ошибку - The column id must be mapped to a field in class AGA\AnalyticsBundle\Entity\Platform since it is referenced by a join column of another class.
Не могу понять, как правильно организовать сущности при такой связи Товар-Площадка и как правильно добавлять новые сущности Goods. Прошу сообщество помочь разобраться.