Doctrine 2实体列方法名称

时间:2015-11-11 08:04:47

标签: php doctrine-orm

有没有办法定义方法名称manuall而不是生成的名称?

让我们在下面的实体上展示一个例子(使用doctrine自动生成的方法):

<?php

namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * 
 * @ORM\Entity(repositoryClass="Application\EntityRepository\Zone")
 * @ORM\Table(name="zones")
 *
 */
class Zone
{
    /**
     * @var ZoneRecordNS[]
     * @ORM\OneToMany(targetEntity="Application\Entity\ZoneRecordNS", mappedBy="zone", cascade={"all"})
     * @ORM\OrderBy({"ownername" = "ASC"})
     */
    protected $recordsns;

    /**
     * Get recordsns
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getRecordsns()
    {
        return $this->recordsns;
    }

    /**
     * Add recordsn
     *
     * @param \Application\Entity\ZoneRecordNS $recordsn
     *
     * @return Zone
     */
    public function addRecordsn(\Application\Entity\ZoneRecordNS $recordsn)
    {
        $this->recordsns[] = $recordsn;

        return $this;
    }

    /**
     * Remove recordsn
     *
     * @param \Application\Entity\ZoneRecordNS $recordsn
     */
    public function removeRecordsn(\Application\Entity\ZoneRecordNS $recordsn)
    {
        $this->recordsns->removeElement($recordsn);
    }
}

Doctrine 2编写方法“addRecordsn”,但我想把它命名为“addRecordNS”。

如果我重写自动生成的方法并强制使用“orm:generate-entities --generate-methods = 1”,则doctrine将再次重新创建自动生成的方法。

是否可以创建注释或其他内容来强制学说使用用户编写的方法而不是自动生成的方法?

更新 我现在也尝试重命名。

与“$ recordNS”:

/**
 * @var ZoneRecordNS[]
 * @ORM\OneToMany(targetEntity="Application\Entity\ZoneRecordNS", mappedBy="zone", cascade={"all"})
 * @ORM\OrderBy({"ownername" = "ASC"})
 */
protected $recordNS;

/**
 * Add recordN
 *
 * @param \Application\Entity\ZoneRecordNS $recordN
 *
 * @return Zone
 */
public function addRecordN(\Application\Entity\ZoneRecordNS $recordN)
{
    $this->recordNS[] = $recordN;

    return $this;
}

/**
 * Remove recordN
 *
 * @param \Application\Entity\ZoneRecordNS $recordN
 */
public function removeRecordN(\Application\Entity\ZoneRecordNS $recordN)
{
    $this->recordNS->removeElement($recordN);
}

/**
 * Get recordNS
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getRecordNS()
{
    return $this->recordNS;
}

和“$ recordNSs”:

/**
 * @var ZoneRecordNS[]
 * @ORM\OneToMany(targetEntity="Application\Entity\ZoneRecordNS", mappedBy="zone", cascade={"all"})
 * @ORM\OrderBy({"ownername" = "ASC"})
 */
protected $recordNSs;

/**
 * Add recordNSs
 *
 * @param \Application\Entity\ZoneRecordNS $recordNSs
 *
 * @return Zone
 */
public function addRecordNSs(\Application\Entity\ZoneRecordNS $recordNSs)
{
    $this->recordNSs[] = $recordNSs;

    return $this;
}

/**
 * Remove recordNSs
 *
 * @param \Application\Entity\ZoneRecordNS $recordNSs
 */
public function removeRecordNSs(\Application\Entity\ZoneRecordNS $recordNSs)
{
    $this->recordNSs->removeElement($recordNSs);
}

/**
 * Get recordNSs
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getRecordNSs()
{
    return $this->recordNSs;
}

所以我的变量名称delaration似乎不可能获得正确的人类可读方法名称: - (。

遗憾的是,也没有强制手动输入方法名称的注释。

1 个答案:

答案 0 :(得分:1)

Doctrine使用 a singularize method 从您的媒体资源名称中获取方法名称。因此属性名称是方法名称的基础。因此,如果你想要NS与大写字符,你也应该写你的属性名称。附加的's'使它成为复数并被剥离为单个元素。这就是为什么你得到addRecordsn而不是你想要的addRecordns(检查sn的顺序)

protected $recordNSs;

会为您提供addRecordNSremoveRecordNS

或使用

protected $records;

将为您提供addRecordremoveRecord

或使用

protected $NSRecords;

将为您提供addNSRecordremoveNSRecord