Symfony3 - Ассоциация относится к вспомогательному полю, которое не существует с ManyToMany и таблицей полей - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь создать отношение manyToMany с большим количеством атрибутов, чем идентификаторов, поэтому мне нужно два отношения OneToMany и два отношения ManytoOne, имеющие три таблицы / сущности.

У меня есть сущность Product, сущность Client и сущность ProductClient:

class Client 
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id_client", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $idClient;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=100, nullable=false)
     */
    private $name;

    /**
     * @var \ProductClient
     *
     * @ORM\OneToMany(targetEntity="ProductClient", mappedBy="client")
     */
    private $products_clients;

}

class Product
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id_product", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $idProduct;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=100, nullable=false)
     */
    private $name;

    /**
     * @var \ProductClient
     *
     * @ORM\OneToMany(targetEntity="ProductClient", mappedBy="product")
     */
    private $products_clients;
}

class ProductClient
{

    /**
     * @ORM\Column(name="product_id", type="integer")
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="products_clients")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id_product", nullable=false)
     */
    protected $product;

    /**
     * @ORM\Column(name="client_id", type="integer")
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Client", inversedBy="products_clients")
     * @ORM\JoinColumn(name="client_id", referencedColumnName="id_client", nullable=false)
     */
    protected $client;

    /**
     * @var bool
     *
     * @ORM\Column(name="status", type="boolean")
     */
    private $status;
}

Это что-то вроде этого (с его получателями и установщиками и другими атрибутами).Но Symfony запускает две «ошибки недействительных сущностей», когда я захожу в Product crud:

AppBundle \ Entity \ Product - Ассоциация AppBundle \ Entity \ Product # products_clients ссылается на поле собственной стороны AppBundle \ Entity\ ProductClient # product, который не определен как ассоциация, но как поле.

AppBundle \ Entity \ Product - Ассоциация AppBundle \ Entity \ Product # products_clients ссылается на собственное поле AppBundle \ Entity \ ProductClient # product, котороене существует.

И тот же результат, если я иду к клиенту Crud.Что не так?

1 Ответ

0 голосов
/ 19 февраля 2019

Как видно из сообщения об ошибке, AppBundle\Entity\ProductClient#product is not defined as association, but as field.

Просто удалите это @ORM\Column(name="product_id", type="integer") и это @ORM\Column(name="client_id", type="integer").

class ProductClient
{
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="products_clients")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id_product", nullable=false)
     */
    protected $product;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Client", inversedBy="products_clients")
     * @ORM\JoinColumn(name="client_id", referencedColumnName="id_client", nullable=false)
     */
    protected $client;

    /**
     * @var bool
     *
     * @ORM\Column(name="status", type="boolean")
     */
    private $status;
}
...