Doctrine2 似乎为其延迟加载的Proxy对象添加魔法。它使我的结果不正确,我无法弄清楚是什么导致它。
这是我的班级模特:
类“RedProduct”继承自抽象类“Product”,它实现了接口“BaseProduct”
抽象类Product拥有主键:
abstract class Product implements BaseProduct {
/** @Id @Column (type="integer", name="ID") @GeneratedValue */
protected $id;
public function getId() {
return $this->id;
}
}
我希望RedProduct在返回之前将字母'R'添加到id。
class RedProduct extends Product {
public function getId() {
return 'R' . $this->id;
}
}
但是在代理类中,getId()方法(并且只有getId()方法)已被修改为:
public function getId()
{
if ($this->__isInitialized__ === false) {
return $this->_identifier["id"];
}
$this->__load();
return parent::getId();
}
答案 0 :(得分:-1)
如果检查代理上的getId()方法,您会看到它有这一行:
return parent::getId();
这意味着它将调用模型类(RedProduct)上定义的getId()函数,因为所有代理都扩展了相应的模型。问题出在其他地方。
我不确定你是通过修改模型返回的id来实现的,但Doctrine在持久化实体时不调用你的getter,它使用反射,所以如果问题是你的id不正确数据库,这可能是原因。