У меня есть 2 сущности - Платформа и Продукт. В таблице «Продукты» у меня есть составной первичный ключ [идентификатор продукта + идентификатор платформы]. Один продукт может быть представлен на многих платформах, а одна платформа может содержать много продуктов, поэтому ассоциация — ManyToMany.
Сущность платформы:
/**
* 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="Product", mappedBy="platforms", cascade={"ALL"}, indexBy="numpp")
*/
protected $products;
public function __construct()
{
$this->products = new ArrayCollection();
}
public function addProducts($numpp)
{
$this->products[$numpp] = new Product($numpp, $this);
}
Сущность продукта:
/**
* Product
*
* @ORM\Table(name="Products")
*/
class Product
{
/**
* @var string
*
* @ORM\Column(name="Numpp", type="string", length=6)
* @ORM\Id
*/
private $numpp;
/**
* @var int
*
* @ORM\ManyToMany(targetEntity="Platform", inversedBy="products")
* @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;
}
В моем контроллере при попытке создать новый объект Product...
$em = $this->getDoctrine()->getManager();
$platform = $em->getRepository("AGAAnalyticsBundle:Platform")->find(1);
$product = new Product('05062', $platform);
$em->persist($product);
$em->flush();
Я получаю сообщение об ошибке: Невозможно вставить значение NULL в столбец "Platform_Id" таблицы "dbo.Products".
И другим способом, используя метод addProduct...
$em = $this->getDoctrine()->getManager();
$platform = $em->getRepository("AGAAnalyticsBundle:Platform")->find(1);
$platform->addProduct('05062');
$em->flush();
Я получаю сообщение об ошибке: Идентификатор столбца должен быть сопоставлен с полем в классе AGA\AnalyticsBundle\Entity\Platform, поскольку на него ссылается столбец соединения другого класса.
Пожалуйста, помогите понять, где я не прав и как мне правильно построить эту связь между моими сущностями.