2013-12-19 215 views
0

我有类miejsceSymfony2的学说onetoone得到

namespace Miejsce\ObiektyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 


/** 
* Miejsce 
* @ORM\Entity 
* @ORM\Table(name="mMiejsce") 
*/ 
class Miejsce 
{ 

... 

/** 
    * @var Lokalizacja $lokalizacja 
    * @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja" , mappedBy="miejsce") 
    * @ORM\JoinColumn(name="id", referencedColumnName="id") 
    */ 
    protected $lokalizacja; 

    /** 
    * Get lokalizacja 
    * 
    * @return \Miejsce\LokalizacjaBundle\Entity\Lokalizacja 
    */ 
    public function getLokalizacja() 
    { 
     return $this->lokalizacja; 
    } 

lokalizacja

namespace Miejsce\LokalizacjaBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Miejsce\ObiektyBundle\Entity\Miejsce; 

/** 
* @ORM\Entity 
* 
* @ORM\Table(name="mLokalizacja") 
* 
*/ 
class Lokalizacja { 
    /** 
    * @var Miejsce 
    * @ORM\OneToOne(targetEntity="Miejsce\ObiektyBundle\Entity\Miejsce", inversedBy="lokalizacja") 
    * @ORM\JoinColumn(name="id", referencedColumnName="id") 
    */ 
    protected $miejsce; 

我尝试在控制器获得对象:

$miejsce = $this->getDoctrine() 
      ->getRepository('MiejsceObiektyBundle:Miejsce') 
      ->find(1); 

var_dump($miejsce->getLokalizacja()); 

,并有空时不要有= * @ORM \ JoinColu mn(name =“id”,referencedColumnName =“id”) 在数据库中我有mMiejsce.id = 1和mLokalizacja.id

为什么这个不连接这个元素? 我想得到miejsce对象,并已提交lokalizacja - onetoone关系 - 编号= ID

我做错了什么?

,但是当我把* @ORM \ JoinColumn(name = “ID”,referencedColumnName = “ID”)

我得到:

类Miejsce \ LokalizacjaBundle \实体\ Miejsce不存在 500内部服务器错误 - ReflectionException

现在

我有:

确定,所以现在我有:

/** 
* Miejsce 
* @ORM\Entity 
* @ORM\Table(name="mMiejsce") 
*/ 
class Miejsce 
{ 

    /** 
    * @var integer 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var Lokalizacja $lokalizacja 
    * @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja", mappedBy="miejsce") 
    * @ORM\JoinColumn(name="id", referencedColumnName="miejsce_id") 
    */ 
    protected $lokalizacja; 

class Lokalizacja { 

    /** 
    * Lokalizacja.id = Miejsce.id 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    */ 
    protected $id; 


    /** 
    * @var Miejsce 
    * @ORM\OneToOne(targetEntity="Miejsce\ObiektyBundle\Entity\Miejsce", inversedBy="lokalizacja") 
    * @ORM\JoinColumn(name="miejsce_id", referencedColumnName="id") 
    */ 
    protected $miejsce; 

    /** 
    * @ORM\Column(type="integer") 
    */ 
    protected $miejsce_id; 

数据库的更新工作,确定

php app/console doctrine:schema:update --force 
Database schema updated successfully! "5" queries were executed 

,但仍然有:

Class Miejsce\LokalizacjaBundle\Entity\Miejsce does not exist 
500 Internal Server Error - ReflectionException 

它很奇怪 - 为什么学说/ symfony中试图找到不同势束这个类? (实体是在其他包也许这就是问题?)

回答

-1

按照Doctrine Association Mapping Documentation,你需要指定的关系是如何映射下面是从文档的例子(通过ID和对象。):

<?php 
/** @Entity **/ 
class Customer 
{ 
    // ... 

    /** 
    * @OneToOne(targetEntity="Cart", mappedBy="customer") 
    **/ 
    private $cart; 

    // ... 
} 

/** @Entity **/ 
class Cart 
{ 
    // ... 

    /** 
    * @OneToOne(targetEntity="Customer", inversedBy="cart") 
    * @JoinColumn(name="customer_id", referencedColumnName="id") 
    **/ 
    private $customer; 

    // ... 
} 

对于您的问题,您应该创建一个参考ID并将其用于其中一个对象中的JoinColumn。不要忘了inversedBymappedBy

class Miejsce 
{ 
    // ... 

    /** 
    * @var Lokalizacja $lokalizacja 
    * @ORM\OneToOne(targetEntity="Miejsce\LokalizacjaBundle\Entity\Lokalizacja", inversedBy="miejsce") 
    * @ORM\JoinColumn(name="lokalizacja_id", referencedColumnName="id") 
    **/ 
    protected $lokalizacja; 

    // ... 
} 


class Lokalizacja { 

    // ... 

    /** 
    * @var Miejsce 
    * @ORM\OneToOne(targetEntity="Miejsce\ObiektyBundle\Entity\Miejsce",mappedBy="lokalizacja") 
    */ 
    protected $miejsce; 

    // ... 
} 

下面是你的setter/getter函数应该看起来像你的映射对象。任何地方,你尝试创建一个新的MiejsceLokalizacja内,一个新的Lokalizacja内的Miejsce,你应该包括完整的命名空间

public function setMiejsce(Miejsce\ObiektyBundle\Entity\Miejsce $miejsce) 
{ 
    $this->miejsce = $miejsce; 
} 
+0

我喜欢你写的,但现在有 - 类Miejsce \ LokalizacjaBundle \实体\ Miejsce做不存在 - 为什么这个搜索Miejsce \ LokalizacjaBundle \ Entity \ Miejsce这个类是在Miejsce \ ObiektyBundle \ Entity不是LokalizacjaBundle –

+0

lokalizacja_id?但这个关系有miejsce.id = lokalizacja.id - 没有插件行lokalizacja_id只有主要到主 –

+0

看看我为我写的代码编辑。注意'lokalizacja_id'?你必须在'Miejsce'中创建一个新的变量,该变量将存储引用'Lokalizacja'的ID。当使用'id'作为两个值的'JoinColumn'时,你试图将'Miejsce'的'id'和''Lokalizacja'的'id'映射到一起! – sjagr