我知道有这个问题Default value in Doctrine
我的问题是,当列有ManyToOne关系时,如何在Doctrine2 / Symfony2中设置默认值= 0?
数据库中的product_id
列是not null
,我无法更改!
如果我执行setProductId(0),它会以某种方式被setProduct(null)覆盖而且我得到了。
Integrity constraint violation: 1048 Column 'product_id' cannot be null
如果我按照doctrine-faqs的建议默认$product = 0;
或$productId = 0;
或两者,我
Expected value of type "Entity\Product" ...
我想设置它= 0如果没有设置!
是否可以或者甚至允许将$ productId和$ product属性指向同一个数据库列?
代码几乎看起来像这样:
class ShopLog {
/**
* @var integer
*
* @ORM\Column(name="product_id", type="integer", nullable=false) // , columnDefinition="DEFAULT 0" does not work
*/
private $productId;
/**
* @var Entity\Product
*
* @ORM\ManyToOne(targetEntity="Entity\Product")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false) // , columnDefinition="DEFAULT 0" does not work
* })
*/
private $product;
/**
* Set productId
*
* @param integer $productId
* @return ShopLog
*/
public function setProductId($productId)
{
$this->productId = $productId;
return $this;
}
/**
* Set product
*
* @param \Entity\Product $product
* @return ShopLog
*/
public function setProduct(\Entity\Product $product = null)
{
$this->product = $product;
return $this;
}
答案 0 :(得分:1)
你的问题有两个问题。
首先,您不能将$ product和$ productId属性指向同一数据库列。
您应该只有$ product属性,如果您需要访问产品的$ id属性,请执行以下操作:
$productId = $shoplog->getProduct()->getId();
其次,要允许数据库列product_id接受空值,只需在注释中设置它,就像Marius在其注释中所说的那样(之后,不要忘记用php app/console doctrine:schema:update
更新数据库)。
因此,您的整个代码应如下所示:
class ShopLog {
/**
* @var Entity\Product
*
* @ORM\ManyToOne(targetEntity="Entity\Product")
* @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=true)
* })
*/
private $product;
/**
* Set product
*
* @param \Entity\Product $product
* @return ShopLog
*/
public function setProduct(\Entity\Product $product = null)
{
$this->product = $product;
return $this;
}
}