我正在尝试将两个属性绑定到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做我想做的事吗?或者我应该只使用引用的对象,而忘记直接将整数分配给此列?
答案 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
进行互动。您将为每个属性创建一个访问者。