我有两个表:plans
和marks
。
对于这两个表
<?php
/**
* @Entity
* @Table(name="marks")
*/
class Mark{
/**
* @ManyToOne(targetEntity="Plan", inversedBy="marks")
* @JoinColumn(name="plan_id", referencedColumnName="id")
**/
protected $plan = null;
...
}
并且
<?php
/**
* @Entity
* @Table(name="plans")
*/
class Plan{
/**
* @OneToMany(targetEntity="Mark", mappedBy="plan")
*/
private $marks;
...
}
正如您从表marks
中的代码中可以理解的那样,我有字段plan_id
(存储计划ID)。此字段不是必填字段,我默认需要plan_id = 0
,但我可以这样做。如果我在类$plan
= 0中设置字段Mark
,则会出现预期对象的错误。但如果我设置plan = 0,它会将NULL
保存在数据库中,我根本不需要它。
也许有人有一些建议?
答案 0 :(得分:0)
在Mark-&gt; setPlan()
上使用lifecycle callbacks/**
* @Entity
* @Table(name="marks")
* @ORM\HasLifecycleCallbacks
*/
class Mark{
/**
* @ManyToOne(targetEntity="Plan", inversedBy="marks")
* @JoinColumn(name="plan_id", referencedColumnName="id")
**/
protected $plan = null;
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function setPlan(Plan $plan = null){
if(is_null($var)){
$this->plan = 0;
}
}
但我认为Doctrine会在尝试找到id = 0的计划时返回错误。