2013-08-31 4 views
0

Я ищу некоторую помощь относительно того, почему мои отношения OneToMany в доктрине возвращают только одно значение. Моя модель данных имеет три таблицы. Пользователи, авторизация и приложения. Таблица авторизации - это клей, который отображает пользователей в приложениях, а также содержит поле уровня доступа, указывающее уровень доступа для этого приложения.OneToMany Relationship Only Returns 1 Row

У меня есть пользователь, имеющий три записи в авторизации для трех разных приложений, но по какой-то причине доктрина загружает только одну из этих записей авторизации. Я включил мою полную модель данных ниже. Этот атрибут является «авторизацией» в таблице Webusers.

Кто-нибудь знает, что я делаю неправильно?

class Webusers { 
/** 
* @var integer 
* 
* @ORM\Column(name="userid", type="integer", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $userid;  
/** 
* @var \Doctrine\Common\Collections\Collection 
* 
* @ORM\ManyToMany(targetEntity="Applications", mappedBy="userid") 
*/ 
private $applications; 

/** 
* @var \Doctrine\Common\Collections\Collection 
* 
* @ORM\OneToMany(targetEntity="Authorization", mappedBy="user") 
*/ 
private $authorization; 

/** 
* Constructor 
*/ 
public function __construct() { 
    $this->applications = new \Doctrine\Common\Collections\ArrayCollection(); 
    $this->authorization = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

class Authorization { 
/** 
* @var integer 
* 
* @ORM\Column(name="accesslevel", type="integer", nullable=false) 
*/ 
private $accesslevel; 

/** 
* @var integer 
* 
* @ORM\Column(name="applicationid", type="integer", nullable=false) 
* $ORM\Id 
*/ 
private $applicationid; 

/** 
* @var integer 
* 
* @ORM\Column(name="userid", type="integer", nullable=false) 
* @ORM\Id 
*/ 
private $userid; 

/** 
* @var \Webusers 
* 
* @ORM\ManyToOne(targetEntity="Webusers") 
* @ORM\JoinColumn(name="userid", referencedColumnName="userid") 
*/ 
private $user; 
} 

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

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=50, nullable=false) 
*/ 
private $name; 
/** 
* @var \Doctrine\Common\Collections\Collection 
* 
* @ORM\ManyToMany(targetEntity="Webusers", inversedBy="applicationid") 
* @ORM\JoinTable(name="authorization", 
* joinColumns={ 
*  @ORM\JoinColumn(name="applicationid", referencedColumnName="applicationid") 
* }, 
* inverseJoinColumns={ 
*  @ORM\JoinColumn(name="userid", referencedColumnName="userid") 
* } 
*) 
*/ 
private $userid; 

/** 
* Constructor 
*/ 
public function __construct() 
{ 
    $this->userid = new \Doctrine\Common\Collections\ArrayCollection(); 
} 
} 

ответ

0

я был в состоянии исправить это, убедившись, что я определил как веб-пользователи и приложения отношения как ManyToOne и давая им свойство @ORM \ Id, так как они составляют составной первичный ключ.

Я думаю, что основная причина, по которой это было неудачно, состояла в том, что я не связывал разрешения с приложениями.

ключевых моментов моей новой модели заключается в следующем:

class Webusers { 
/** 
* @var \Doctrine\Common\Collections\Collection 
* @ORM\OneToMany(targetEntity="Authorization", mappedBy="user") 
*/ 
private $authorization; 
} 

class Authorization { 
/** 
* 
* @ORM\Id 
* @ORM\ManyToOne(targetEntity="Applications") 
* @ORM\JoinColumn(name="applicationid", referencedColumnName="applicationid") 
*/ 
private $application; 

/** 
* 
* @ORM\Id 
* @ORM\ManyToOne(targetEntity="Webusers") 
* @ORM\JoinColumn(name="userid", referencedColumnName="userid") 
*/ 
private $user; 
} 

class Applications { 
/** 
* @ORM\OneToMany(targetEntity="Authorization", mappedBy="application") 
*/ 
private $authorization; 
}