2016-09-01 1 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; 
} 

я ожидал, что, когда я звоню $repository->findAll(); я хотел бы получить все объекты Резорт и Resort->properties присоединились бы ResortProperty сущность, но это NULL.

Я не знаю, что я сделал не так, может кто-то указать на мою ошибку? Спасибо

ответ

1

Я предполагаю, что проблема заключается в JoinColumn-Annotation. Сущность с внешним ключом (ResortProperties) должна знать, как присоединиться к двум таблицам. «Обратное» - заявка на Resort-Entity использует это правило.

Это должно выглядеть примерно следующее в вашем ResortProperties-Сущности:

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

«resort_id» это имя вашего внешнего ключа-колонки.

Надеюсь, это поможет.

+0

Спасибо, мне пришлось внести некоторые изменения, я отправлю его через минуту – WellBloud

0

В ResortProperties сущности я должен был сделать это изменение:

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 сущности я должен был изменить это так:

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

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

Теперь он работает правильно, надеюсь, что это поможет другим