Php 条令:生成:实体-无法重新声明<;函数名>;

Php 条令:生成:实体-无法重新声明<;函数名>;,php,symfony,doctrine,Php,Symfony,Doctrine,我有一个现有的数据库,我使用原则:映射:导入成功地将其导入symfony2捆绑包 这些表使用下划线命名。其中一个表有两列: - ab_desc - abd_esc 导入后,属性将转换为camelCase,如下所示 - $abDesc - $abdEsc 这是绝对正确的,因为PHPs变量是区分大小写的 但是如果我现在尝试使用原则:generate:entities 条令试图创建以下方法: - function getabDesc() - function getabdEsc() 这导致了

我有一个现有的数据库,我使用
原则:映射:导入
成功地将其导入symfony2捆绑包

这些表使用下划线命名。其中一个表有两列:

- ab_desc  
- abd_esc
导入后,属性将转换为camelCase,如下所示

- $abDesc
- $abdEsc
这是绝对正确的,因为PHPs变量是区分大小写的

但是如果我现在尝试使用
原则:generate:entities
条令试图创建以下方法:

- function getabDesc()
- function getabdEsc()
这导致了错误

cannot redclare "getabDesc()"
由于PHPs函数不区分大小写


我现在可以自己编写getter和setter了,但我想知道是否有更好的解决方案,比如告诉doctrine使用下划线属性或类似的东西。

您可以执行以下操作:

/**
 * @ORM\Entity(table="ab")
 */
class Ab {
    /**
     * @ORM\Column(name="ab_desc")
     */
    protected $abDesc;

    /**
     * @ORM\Column(name="abd_desc")
     */
    protected $abdDesc;

    public getAbDesc() {
        return $this->abDesc;
    }

    public getAbdDesc() {
        return $this->abdDesc;
    }

}

您可以执行以下操作:

/**
 * @ORM\Entity(table="ab")
 */
class Ab {
    /**
     * @ORM\Column(name="ab_desc")
     */
    protected $abDesc;

    /**
     * @ORM\Column(name="abd_desc")
     */
    protected $abdDesc;

    public getAbDesc() {
        return $this->abDesc;
    }

    public getAbdDesc() {
        return $this->abdDesc;
    }

}

我想到的一件事是忘记getter和setter,将属性公开,而不是私有。@frankbee原则不适用于公共属性。你可能是对的Gerry。我总是使用getter和setter以及逻辑属性名。我想到的一件事是忘记getter和setter,将属性设置为公共属性而不是私有属性。@frankbet原则不适用于公共属性。你可能是对的Gerry。我总是使用getter、setter和逻辑属性名。我不明白你的意思。我的属性是
$abDesc
$abDesc
。名字相同,但大写字母和小写字母的用法不同。我总是创建getter和setter。我总是遵循这个简单的规则:get+大写的属性名和set+大写的peoperty名。在anotations上,我可以在表中设置字段名,这个名称可以与属性名完全不同。我不明白你的意思。我的属性是
$abDesc
$abDesc
。名字相同,但大写字母和小写字母的用法不同。我总是创建getter和setter。我总是遵循这个简单的规则:get+大写的属性名和set+大写的peoperty名。在anotations中,我可以在表中设置字段名,该名称可以与属性名完全不同。