2016-11-25 2 views
0

У меня есть отношения ArrayCollection, определенной в двух субъектов, например:Учение ManyToOne ArrayCollection заполняется только с одним значением

/** 
* User 
* 
* @ORM\Table(name="users", uniqueConstraints= {@ORM\UniqueConstraint(name="email_UNIQUE", columns={"email"})}, indexes={@ORM\Index(name="email_id", columns={"id_user", "email"})}) 
* @ORM\Entity 
*/ 

class User 
{ 
/** 
* @ORM\ManyToOne(targetEntity="App\Entities\Usercharts", inversedBy="charts") 
* @ORM\JoinColumn(name="id_user", referencedColumnName="id_user") 
*/ 
private $userscharts; 

и

/** 
* Useritems 
* 
* @ORM\Table(name="useritems", indexes={@ORM\Index(name="userid", columns={"id_user"}), @ORM\Index(name="chartno", columns={"chart_no"})}) 
* @ORM\Entity 
*/ 
class Usercharts 
{ 

/** 
* @ORM\OneToMany(targetEntity="App\Entities\User", mappedBy="userscharts") 
* 
*/ 
private $charts; 


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

структуры данных usercharts: enter image description here

Проблема заключается в том, что ArrayCollection заполняется только одним значением в том, что, по-видимому, является последним элементом в заполненной таблице; например, для этих данных,

'1201','4769' 
'1202','4769' 
'1400','4769' 
'1434','4769' 
'1435','4769' 
'1510','4769' 
'2000','4769' 
'2050','4769' 
'3726','4769' 
'3808','4769' 
'7950','4769' 

The ArrayCollection $ возвращает диаграмму стоимость только 7950 в шаблоне прутого

<ul> 
     {% for chart in user.userscharts %} 
      <li>{{ chart.chartno }}</li> 
     {% endfor %} 
    </ul> 

Я попытался добавить первичный идентификатор ключа также для chart_no (который, кажется, имеет смысл делать):

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

, но это приводит к

OutOfBoundsException.php line 40 
at OutOfBoundsException::missingPrimaryKeyValue('App\Entities\Usercharts', 'chartno') in AbstractProxyFactory.php line 125 
at AbstractProxyFactory->getProxy('App\Entities\Usercharts', array('userid' => '4769')) in UnitOfWork.php line 2698 

Как правильно изменить декларации доктрины объекта, чтобы получить полный массив диаграмм?

ответ

1

Недопустимые типы ассоциаций. Один пользователь может иметь много карт, так что объединение должно быть OneToMany для $userscharts и ManyToOne для $charts

class User 
{ 
/** 
* @ORM\OneToMany(targetEntity="App\Entities\Usercharts", mappedBy="user") 
*/ 
private $userscharts; 

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

class Usercharts 
{ 

/** 
* @ORM\ManyToOne(targetEntity="App\Entities\User", inversedBy="userscharts") 
* @ORM\JoinColumn(name="id_user", referencedColumnName="id_user") 
*/ 
private $user; 
Смежные вопросы