教义geberated实体,破坏的vars和关系,Doctrine 2和zf2

时间:2014-02-10 17:03:48

标签: php symfony orm doctrine-orm zend-framework2

我有一个旧的MySQL数据库。不知怎的,我已经设法从命令行生成实体,但结果与我期望的不同。

生成后,它已从我的表格和字段名称中删除了_;比如这个班:

namespace CMS\Entity;

use Doctrine\ORM\Mapping as ORM;


/**
 * Countries
 *
 * @ORM\Table(name="Countries")
 * @ORM\Entity
 */
class Countries
{
    /**
     * @var integer
     *
     * @ORM\Column(name="pa_CountryID", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $paCountryid;

    /**
     * @var string
     *
     * @ORM\Column(name="t_CountryName", type="string", length=255, precision=0, scale=0, nullable=false, unique=false)
     */
    private $tCountryname;

    /**
     * @var string
     *
     * @ORM\Column(name="t_MapAbr", type="string", length=255, precision=0, scale=0, nullable=true, unique=false)
     */
    private $tMapabr;


    /**
     * Get paCountryid
     *
     * @return integer 
     */
    public function getPaCountryid()
    {
        return $this->paCountryid;
    }

    /**
     * Set tCountryname
     *
     * @param string $tCountryname
     * @return Countries
     */
    public function setTCountryname($tCountryname)
    {
        $this->tCountryname = $tCountryname;

        return $this;
    }

    /**
     * Get tCountryname
     *
     * @return string 
     */
    public function getTCountryname()
    {
        return $this->tCountryname;
    }

    /**
     * Set tMapabr
     *
     * @param string $tMapabr
     * @return Countries
     */
    public function setTMapabr($tMapabr)
    {
        $this->tMapabr = $tMapabr;

        return $this;
    }

    /**
     * Get tMapabr
     *
     * @return string 
     */
    public function getTMapabr()
    {
        return $this->tMapabr;
    }
}

我的问题:

  • 如何使用完全相同的表和字段名称生成实体?
  • 如果我有另一个使用pa_CountryID作为外键的实体;如何使它们之间的关系只需一步填充它们?

我的其他实体看起来像这样:

<?php
namespace CMS\Entity;

use Doctrine\ORM\Mapping as ORM;
/**
 * LoginUsers
 *
 * @ORM\Table(name="Login_Users", indexes={@ORM\Index(name="fulltext", columns={"pt_userName", "t_firstName", "t_lasName"})})
 * @ORM\Entity
 */
class LoginUsers
{
    /**
     * @var integer
     *
     * @ORM\Column(name="pa_userID", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     */
    private $paUserid;

    /**
     * @var string
     *
     * @ORM\Column(name="pt_userName", type="string", length=50, precision=0, scale=0, nullable=false, unique=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     */
    private $ptUsername;


    /**
     * @var integer
     *
     * @ORM\Column(name="i_CountryID", type="integer", precision=0, scale=0, nullable=true, unique=false)
     */
    private $iCountryid;
}

2 个答案:

答案 0 :(得分:0)

来自@ORM \ Table和@ORM \ Column的“name”属性表示数据库中的表和字段名称,没有任何更改,除了当您与PHP对象交互时它将没有下划线

答案 1 :(得分:0)

1

  

如何生成具有完全相同的表和字段名称的实体?

我认为你错了。所有字段名称都可以。看一下注释

/**
 * ...
 * @ORM\Column(name="pa_userID", type="integer", precision=0, scale=0, nullable=false, unique=false)
 * ...
 */
private $paUserid;

您有类属性$paUserid,但ORM列名称为pa_userID。因此,没有'_'的属性被映射正确。这是一个Symfony命名约定。

2

  

如果我有另一个使用pa_CountryID作为外键的实体;如何使它们之间的关系一步填充它们?

正如我所提到的,列名是可以的。所以你的关系是安全的。现在要在表格之间建立关系,您应该阅读Database & DoctrineDoctrine Associations

in big shourtcut - 如何设置LoginUsers和Countries之间的关系。现在LoginUsers :: $ iCountryid将是一个国家OBJECT,而不是id。在数据库中,您将找到id ofcourse。

// ...
use Doctrine\Common\Collections\ArrayCollection;
// ...
class Countries
{
    // ...
    /**
     * @var Doctrine\Common\Collections\ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="\CMS\Entity\LoginUsers", mappedBy="iCountryid")
     */
    private $loginUsers;
    // ...
    public function __construct()
    {
        $this->loginUsers = new ArrayCollection();
    }
}

class LoginUsers
{
    // ...
    /**
     * @var \CMS\Entity\Countries
     *
     * @ORM\ManyToOne(targetEntity="\CMS\Entity\Countries", inversedBy="loginUsers")
     * @ORM\JoinColumn(name="i_CountryID", referencedColumnName="id")
     */
    private $iCountryid;
    // ...
}