我有一个旧的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;
}
答案 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 & Doctrine和Doctrine 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;
// ...
}