2016-09-01 14 views
0

私はManyToOne、OneToOneリレーションを持つエンティティを持っています。私は別のエンティティを持っています。これは最初のエンティティにリンクされています。最初のエンティティとそれに関連する他のエンティティに関する情報を取得することです。Doctrine 2関連するエンティティからアイテムを取得する

私は何らかの理由で呼び出しを行うと、関連するエンティティでNULLを返します。

コード:

<?php 

namespace App\Model\Entities; 

use Doctrine\ORM\Mapping as ORM, 
    Doctrine\Common\Collections\ArrayCollection; 
use Kdyby\Doctrine\Entities\BaseEntity; 

/** 
* Doctrine entity for resorts in destinations 
* @package App\Model\Entities 
* @ORM\Entity 
*/ 
class Resort extends BaseEntity 
{ 

    /** 
    * autoincremented resort id 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    */ 
    protected $id; 

    /** 
    * resort name 
    * @ORM\Column(type="string") 
    */ 
    protected $title; 

    /** 
    * @ORM\OneToOne(targetEntity="ResortProperties", mappedBy="resort", cascade={"persist"}) 
    */ 
    private $properties; 

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

    /** 
    * HERE I WANT TO GET DATA FROM ANOTHER ENTITY 
    * @return type 
    */ 
    public function getProperties() 
    { 
     return $this->properties; 
    } 

} 

および関連エンティティはこれです:

<?php 

namespace App\Model\Entities; 

use Doctrine\ORM\Mapping as ORM, 
    Doctrine\Common\Collections\ArrayCollection; 
use Kdyby\Doctrine\Entities\BaseEntity; 

/** 
* Doctrine entity for resort properties 
* @package App\Model\Entities 
* @ORM\Entity 
*/ 
class ResortProperties extends BaseEntity 
{ 

    /** 
    * autoincremented id 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    */ 
    protected $id; 

    /** 
    * resort id 
    * @ORM\OneToOne(targetEntity="Resort", inversedBy="Resort", cascade={"persist", "remove"}) 
    * @ORM\JoinColumn(onDelete="CASCADE") 
    */ 
    protected $resort; 

    /** 
    * parameter1 
    * @ORM\Column(type="string") 
    */ 
    protected $parameter1; 
} 

私が期待し、私はすべてのリゾートエンティティを取得し、Resort->propertiesになり$repository->findAll();を呼び出すときResortPropertyエンティティを結合することであろうと、それはNULLです。

私は何が間違っているのか分かりませんが、誰かが私の間違いを指摘できますか?ありがとう

答えて

1

問題がJoinColumn-Annotationであると仮定します。 外部キー(ResortProperties)を持つエンティティは、2つのテーブルを結合する方法を知る必要があります。 Resort-Entityの "inversedBy"ステートメントは、このルールを使用します。

それはあなたのResortProperties・エンティティで、次のようになります:

/** 
    * resort id 
    * @ORM\OneToOne(targetEntity="Resort", inversedBy="Resort", cascade={"persist", "remove"}) 
    * @ORM\JoinColumn(name="resort_id", referencedColumnName="id") 
    */ 
    protected $resort; 

「resort_idを」あなたの外部キー列の名前です。

これが役に立ちます。

class ResortProperties extends BaseEntity 
{ 

    /** 
    * resort id 
    * @ORM\OneToOne(targetEntity="Resort", inversedBy="properties", cascade={"persist", "remove"}) 
    * @ORM\JoinColumn(name="resort_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    protected $resort; 
} 

そして、私はこのようにそれを変更しなければならなかったResortエンティティに:私はこの変更をしなければならなかったResortPropertiesエンティティで

+0

ありがとう、私はいくつかの変更を加えなければならなかった、私は分 – WellBloud

0

class Resort extends BaseEntity 
{ 
    /** 
    * @ORM\OneToOne(targetEntity="ResortProperties", mappedBy="resort", cascade={"persist"}) 
    */ 
    private $properties; 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->properties = new ArrayCollection(); 
    } 
} 

今では正常に動作しています、これは他人を助けることを願っています

関連する問題