2016-11-25 66 views
0

我已經在兩個實體定義爲這樣一個ArrayCollection關係:學說多對一的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' 

中的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$userschartsManyToOne$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;