2015-12-02 87 views
1

我使用学说2,我的实体已经设置变量一样:PHP保湿 ClassMethodsHydrator下划线代替,以驼峰造成错误

 /** 
    * @ORM\Column(type="string") 
    */ 
    protected $phone_number; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    protected $e_mail; 

现在我要填写使用保湿像这样从数组这个变量:

public function fromArray($values) 
    { 
     $hydrator = new \Hydrator\ClassMethodsHydrator(); 
     $hydrator->hydrate($values, $this); 
    } 

但是使用这个功能后,我得到错误监守保湿试图调用的代替setPhone_number()setphoneNumber()...

你能帮我实现我的目标,而不是改变下划线到camelCase吗?

谢谢

回答

1

尝试:

/** 
* @ORM\Column(type="string", name="phone_number") 
*/ 
protected $phoneNumber; 

学说将创建数据库架构时反正重命名phoneNumber的到PHONE_NUMBER,但通过使用\列或\表定义的name属性可以确保你的名字被使用。

所以在你数据库表列是:PHONE_NUMBER

实体属性被称为:phoneNumber的

因此,这通常会在setPhoneNumber最终为您制定者这是罚款。

+0

感谢您的回答。这有效,但我有点担心,如果它是一个propop方式来做到这一点。因为实体表示表和对象变量表示列,我不想把它搞乱,因为“同一件事”有不同的名字 –

+0

您可以轻松接受答案 - 这是做到这一点的正确方法。因为即使它感觉是一样的东西 - 它不是!一个是你的表定义,另一个是你的实体定义,根据ORM的概念,这是不一样的。在涉及DQL vs SQL中的SELECTS时,你会看到很多人为这种差异而挣扎。 – LBA