Doctrine

时间:2017-06-30 16:59:58

标签: php doctrine-orm

我正在尝试将两个属性绑定到Doctrine中的同一列。

我的目标是能够从整数值$entity->setSomeId(3)填充和查找整数列,但也能够使用引用的对象$entity->setSome($some)(其中$ some是对象)来完成它

我试图将我的实体定义为:

/**
 * @var Some
 *
 * @ORM\OneToOne(targetEntity="Some")
 * @ORM\joinColumn(name="id", referencedColumnName="other_id")
 */
private $someId;

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer", length=11, precision=0, scale=0, nullable=false, unique=true)
 */
private $something;

它可以检索数据,但在我尝试创建实体时却不行。

我以这样的方式创建一个实体:

$entity = new Entity();
$entity->setSomeId(3)

$entity->getSomeId(); // = 3
$em->persist($entity);
$em->flush();

给我以下错误:

`Integrity constraint: Column id cannot be null`

我想这是因为$something会覆盖某处$someId的值。

我可以用Doctrine做我想做的事吗?或者我应该只使用引用的对象,而忘记直接将整数分配给此列?

1 个答案:

答案 0 :(得分:1)

您可能想要一对一,双向关系:

以下代码段来自位于Association Mapping的Doctrine文档:

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

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

    public function getCart() {
        return $this->cart;
    }    
    // ...
}

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

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

    public function getCustomer() {
        return $this->customer;
    }

    // ...
}

Doctrine将管理您的“ID”,因为它管理着您的关系,您需要做的就是与上面示例中的$cart$customer进行互动。您将为每个属性创建一个访问者。