2015-10-16 6 views
0

У меня есть два объекта, относящихся к этой проблеме, и я хочу, чтобы таблица соединений могла перекрещивать контрольные значения в каждой таблице.Учение Symfony2 Множество сопоставлений ассоциаций ManyToMany недопустимо?

Вот объяснение:

Entity ContainerType.php:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use AppBundle\Entity\Containers; 

/** 
* ContainerType 
* 
* @ORM\Table(name="container_type") 
* @ORM\Entity 
* @ORM\HasLifecycleCallbacks() 
*/ 
class ContainerType 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="date_added", type="datetime") 
    */ 
    private $dateAdded; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="date_modified", type="datetime", nullable=true) 
    */ 
    private $dateModified; 

    /** 
    * @ORM\ManyToMany(targetEntity="Containers", inversedBy="type") 
    * @ORM\JoinTable(name="container_type_containers") 
    **/ 
    private $container; 


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

И сущность Containers.php:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use AppBundle\Entity\ContainerType; 

/** 
* Containers 
* 
* @ORM\Table(name="containers") 
* @ORM\Entity 
*/ 
class Containers 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="number", type="string", length=255) 
    */ 
    private $number; 

    /** 
    * @ORM\ManyToMany(targetEntity="Containers", mappedBy="container") 
    */ 
    private $type; 


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

И хотя обновление схемы работает без проблем, когда я доктрина: схема: подтвердите, я получаю следующий сбой:

[Mapping] FAIL - The entity-class 'AppBundle\Entity\Containers' mapping is invalid: 
* The association AppBundle\Entity\Containers#type refers to the owning side field AppBundle\Entity\Containers#container which does not exist. 

Но поле $ container существует в ContainerType, поэтому я не понимаю, почему он пытается ссылаться на поле, называемое контейнером в сущности Containers?

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

Спасибо Майкл

ответ

0

Я только понял свою ошибку!

Я использовал неправильную целевую Entity в файле Containers.php, я должен был использовать ContainerType в качестве цели, вместо этого у меня были контейнеры, поэтому он пытался найти поле в неправильной таблице!

1

Я думаю, что этот код должен отлично работает для вас :)

ContainerType.php

/** 
    * @ORM\ManyToMany(targetEntity="Containers", inversedBy="containersType") 
    * @ORM\JoinTable(name="container_type_containers", 
    *  joinColumns={@ORM\JoinColumn(name="container_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="container_type_id", referencedColumnName="id")}) 
    */ 
    protected $containers; 

Containers.php

/** 
    * @ORM\ManyToMany(targetEntity="ContainerType", mappedBy="containers") 
    */ 
    protected $containersType; 
Смежные вопросы