0

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 在返回之前在 id 前面加上字母“R”。

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();
}

这意味着我的对象在未初始化时不会返回正确的 id!

“getId”是 Doctrine2 的保留方法还是魔术方法?当我在基类和继承类中创建其他方法时,它对代理没有这种影响。

4

1 回答 1

-1

如果您检查代理上的 getId() 方法,您会看到它有这一行:

return parent::getId();

这意味着它将调用模型类 (RedProduct) 上定义的 getId() 函数,因为所有代理都扩展了相应的模型。问题出在其他地方。

我不确定你想通过修改模型返回的 id 来实现什么,但是 Doctrine 在持久化实体时不会调用你的 getter,它使用反射,所以如果问题是你的 id 在数据库中不正确,这个可能是原因。

于 2012-08-15T15:57:07.010 回答