Symfony 2.8 - Oracle: возвращение ManyToMany Идентификатор столбца должен быть сопоставлен с полем в классе - PullRequest
0 голосов
/ 21 октября 2019

У меня есть две сущности, между которыми существует отношение ManyToMany blogPost et Category et ассоциативная таблица blogPost_Category.

PS: Таблицы существуют в базе данных.

Итак, я начинаю создавать сущности

<?php

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\Column;

/**
*@ORM\Table(name="blogPost")
*@ORM\Entity("App\TestBundle\Repository\BlogPostRepository")
*/
class blogPost {

/**
*@Id
*Column(name="ID", type="integer", length=20, nullable=false, unique=true)
*/
private $id;
.
.
.
/**
*@ORM\ManyToMany(targetEntity="Category", inversedBy="blogPosts")
*@ORM\JoinTable(name="blogPost_Category",
*joinColumns={@ORM\JoinColumn(name="id", referencedColumnName="id")},
*inverseJoinColumns={@ORM\joinColumn(name="id", referencedColumnName="id")}
*)
*/
private $categories;

public function __construct()
{
   $this->categories = new ArrayCollection();
}

public function getCategories()
{
   return $this->categories;
}
.
.
.

Другая сущность имеет те же данные и структуру, и когда я вызываю, например, getCategories на контроллере, я получаю эту ошибку

Идентификатор столбца должен быть сопоставлен с полем в классе App \ TestBundle \ Entity \ blogPost, поскольку на него ссылается столбец соединения другого класса.

есть ли решение?

если нет, могу ли я создать сущность для ассоциативной таблицы и использовать ManyToOne в двух направлениях?

1 Ответ

0 голосов
/ 21 октября 2019

У вас есть несколько идентификаторов в вашей таблице соединений, вам не нужно указывать имя, если вы не хотите, поэтому вы можете изменить свой ORM на:

/**
*  @ORM\ManyToMany(targetEntity="Category", inversedBy="blogPosts")
*  @ORM\JoinTable(name="blogPost_Category")
*/ private $categories;

И в вашей категориилицо:

/**
* @ORM\ManyToMany(targetEntity="BlogPost", mappedBy="categories")
*/

Не забудьте обновить свою схему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...