i have class miejsce
namespace MiejsceObiektyBundleEntity;
use DoctrineORMMapping as ORM;
/**
* Miejsce
* @ORMEntity
* @ORMTable(name="mMiejsce")
*/
class Miejsce
{
...
/**
* @var Lokalizacja $lokalizacja
* @ORMOneToOne(targetEntity="MiejsceLokalizacjaBundleEntityLokalizacja" , mappedBy="miejsce")
* @ORMJoinColumn(name="id", referencedColumnName="id")
*/
protected $lokalizacja;
/**
* Get lokalizacja
*
* @return MiejsceLokalizacjaBundleEntityLokalizacja
*/
public function getLokalizacja()
{
return $this->lokalizacja;
}
和洛卡利扎恰
namespace MiejsceLokalizacjaBundleEntity;
use DoctrineORMMapping as ORM;
use MiejsceObiektyBundleEntityMiejsce;
/**
* @ORMEntity
*
* @ORMTable(name="mLokalizacja")
*
*/
class Lokalizacja {
/**
* @var Miejsce
* @ORMOneToOne(targetEntity="MiejsceObiektyBundleEntityMiejsce", inversedBy="lokalizacja")
* @ORMJoinColumn(name="id", referencedColumnName="id")
*/
protected $miejsce;
我尝试在控制器中获取对象:
$miejsce = $this->getDoctrine()
->getRepository('MiejsceObiektyBundle:Miejsce')
->find(1);
var_dump($miejsce->getLokalizacja());
并且当没有 = * 时有 null = @ORM\JoinColumn(name="id", referencedColumnName="id")在数据库中,我有 mMiejsce.id = 1 和 mLokalizacja.id
那么为什么这不连接这些元素呢?我想获取 miejsce 对象并已提交 lokalizacja - onetoone 关系 - id=id
我做错了什么?
但是当我按 * @ORM\JoinColumn(name="id", referencedColumnName="id")
我得到 :
Class Miejsce\LokalizacjaBundle\Entity\Miejsce not exists500 内部服务器错误 - 反射异常
现在我有:
好的,现在我有:
/**
* Miejsce
* @ORMEntity
* @ORMTable(name="mMiejsce")
*/
class Miejsce
{
/**
* @var integer
* @ORMColumn(type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Lokalizacja $lokalizacja
* @ORMOneToOne(targetEntity="MiejsceLokalizacjaBundleEntityLokalizacja", mappedBy="miejsce" )
* @ORMJoinColumn(name="id", referencedColumnName="miejsce_id")
*/
protected $lokalizacja;
和
class Lokalizacja {
/**
* Lokalizacja.id = Miejsce.id
* @ORMColumn(type="integer")
* @ORMId
*/
protected $id;
/**
* @var Miejsce
* @ORMOneToOne(targetEntity="MiejsceObiektyBundleEntityMiejsce", inversedBy="lokalizacja")
* @ORMJoinColumn(name="miejsce_id", referencedColumnName="id")
*/
protected $miejsce;
/**
* @ORMColumn(type="integer")
*/
protected $miejsce_id;
数据库更新工作正常
php app/console doctrine:schema:update --force
Database schema updated successfully! "5" queries were executed
但仍然有:
Class MiejsceLokalizacjaBundleEntityMiejsce does not exist
500 Internal Server Error - ReflectionException
这很奇怪 - 为什么 Doctrine/Symfony 尝试在不同的捆绑包上找到这个类?(实体在其他捆绑包上 ? 也许这是问题?
根据原则关联映射文档,您需要指定如何映射关系(通过 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
。不要忘记inversedBy
和mappedBy
!
class Miejsce
{
// ...
/**
* @var Lokalizacja $lokalizacja
* @ORMOneToOne(targetEntity="MiejsceLokalizacjaBundleEntityLokalizacja", inversedBy="miejsce" )
* @ORMJoinColumn(name="lokalizacja_id", referencedColumnName="id")
**/
protected $lokalizacja;
// ...
}
class Lokalizacja {
// ...
/**
* @var Miejsce
* @ORMOneToOne(targetEntity="MiejsceObiektyBundleEntityMiejsce",mappedBy="lokalizacja")
*/
protected $miejsce;
// ...
}
下面是您的 setter/getter 函数对于您的映射对象应该是什么样子。无论您尝试在 Lokalizacja
内部创建新Miejsce
,并在 Miejsce
内部创建新Lokalizacja
,都应该包含完整的命名空间
public function setMiejsce(MiejsceObiektyBundleEntityMiejsce $miejsce)
{
$this->miejsce = $miejsce;
}