我上课 miejsce
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 \ JoinColumn(name =“id”,referencedColumnName =“id”)时为null我有mMiejsce.id = 1和mLokalizacja.id
那么为什么这不要连接这些元素呢?我想得到miejsce对象并提交lokalizacja - onetoone关系 - id = id
我做错了什么?
但当我推* @ORM \ JoinColumn(name =“id”,referencedColumnName =“id”)
我得到:
类Miejsce \ LokalizacjaBundle \ Entity \ 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
它非常奇怪 - 为什么doctrine / symfony尝试在不同的捆绑上找到这个类? (实体在其他捆绑包上?也许这是问题?)
1 回答
根据Doctrine Association Mapping Documentation,您需要指定关系的映射方式(通过ID和对象 . )以下是文档中的示例:
对于您的问题,您应该创建一个引用ID并将其用于您的一个对象中的
JoinColumn
. 不要忘记inversedBy
和mappedBy
!以下是映射对象的setter / getter函数应该是什么样子 . 无论您尝试在
Lokalizacja
内创建新的Miejsce
,还是在Miejsce
内创建新的Lokalizacja
,您都应该包含完整的命名空间