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. Прошу сообщество помочь разобраться.


Ответы (0 шт):