2016-09-01 5 views
0

Ich habe eine Entität mit ManyToOne, OneToOne Relationen. Ich habe eine andere Entität, die mit der ersten verknüpft ist und was ich tun möchte, ist, Informationen über die erste Entität sowie alle anderen Entitäten, die damit in Beziehung stehen, zu erhalten.Doktrin 2 Gegenstände von verwandten Entitäten beziehen

Aus irgendeinem Grund, wenn ich den Aufruf mache, gibt NULL in der zugehörigen Entität zurück.

Code:

<?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; 
    } 

} 

Und die damit verbundene Einrichtung ist dies:

<?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; 
} 

ich erwartet hatte, dass, wenn ich $repository->findAll(); nennen würde ich alle Resort Einheiten erhalten und in Resort->properties würde ResortProperty Einheit verbunden werden, aber es ist NULL.

Ich weiß nicht, was ich falsch gemacht habe, kann jemand auf meinen Fehler hinweisen? Danke

Antwort

1

Ich nehme an, das Problem ist die JoinColumn-Annotation. Die Entität mit dem Fremdschlüssel (ResortProperties) muss wissen, wie die beiden Tabellen verknüpft werden. Die "inversedBy" -Statement auf der Resort-Entity verwendet dann diese Regel. in Ihrem ResortProperties-Entity in etwa wie folgt aussehen

Es sollte:

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

"resort_id" ist der Name Ihres Fremdschlüssel-Spalte.

Hoffe, das hilft.

+0

Danke, ich musste einige andere Änderungen vornehmen, ich werde es in einer Minute veröffentlichen – WellBloud

0

In ResortProperties Einheit hatte ich diese Änderung vorzunehmen:

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; 
} 

Und in Resort Einheit hatte ich es wie folgt zu ändern:

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

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

nun wie es funktioniert, hoffen, dass dies anderen helfen

Verwandte Themen