Symfony2 学说一对一得到



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。不要忘记inversedBymappedBy

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

相关内容

  • 没有找到相关文章

最新更新