Проблема Symfony / Doctrine: один-ко-многим - самостоятельная ссылка на первичный ключ - PullRequest
0 голосов
/ 23 ноября 2018

Я хотел бы иметь "пост" с идентификатором.Это можно классифицировать в другом «посте», сохранив идентификатор его родителя.

Я пытался сделать так:

class Post {
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     * @ORM\OneToMany(targetEntity="Post", mappedBy="Id_Post_Parent")
     */
    private $Id_Post;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Post", inversedBy="Id_Post")
     * @ORM\JoinColumn(name="Id_Post", referencedColumnName="Id_Post", nullable=true)
     */
    private $Id_Post_Parent;
    ...
}

, но у меня возникает эта ошибка, когда я проверяюс doctrine:schema:validate:

[FAIL] Недопустимый класс сущностей App \ Entity \ Post mapping:

  • Ассоциация App \ Entity \ Post # Id_Post_Parent ссылается наполе обратной стороны App \ Entity \ Post # Id_Post, которое не определено как ассоциация.
  • Ассоциация App \ Entity \ Post # Id_Post_Parent ссылается на поле обратной стороны App \ Entity \ Post # Id_Post, которое не существует.
  • Указанное имя столбца 'Id_Post' должно быть столбцом первичного ключа в целевом классе сущности 'App \ Entity \ Post'.

Может кто-нибудь мне помочьэто исправить?

1 Ответ

0 голосов
/ 23 ноября 2018

В вашей структуре есть небольшая логическая ошибка - ваша переменная ID_Post пытается быть как первичным ключом (ID), так и стороной ассоциации коллекции.Я не проверял этот синтаксис слишком подробно (вы можете найти пример этой ассоциации вместе с большинством других ассоциаций из документации доктрины: https://www.doctrine -project.org / projects / doctrine-orm / en /2.6 / reference / association-mapping.html # one-to-many-self-referencing ), но в основном вам нужно добавить дочернюю ассоциацию отдельно к вашей сущности, например:

class Post 
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Post", inversedBy="postChildren")
     * @ORM\JoinColumn(name="id_parent_post", referencedColumnName="id", nullable=true)
     */
    private $postParent;

    /**
     * @ORM\OneToMany(targetEntity="Post", mappedBy="postParent")
     */
    private $postChildren;

    public function __construct() {
        $this->postChildren = new \Doctrine\Common\Collections\ArrayCollection();
    }    
}
...