2014-02-10 83 views
1

我有一个旧的MySQL数据库。不知何故,我已经设法从命令行生成实体,但结果与我期望的不同。学说geberated实体,损坏的瓦尔和关系,学说2和zf2

后代已经从我的表和字段名称中删除了_;比如这个类:

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

1.

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

我想你错了。所有字段名称都可以。看看注释

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

你有class属性$paUserid,但ORM列名是pa_userID。所以没有'_'的属性映射正确。这是一个Symfony命名约定。

2.

如果我有一个使用pa_CountryID作为外键的另一个实体;我如何使他们之间的关系能够一步到位?

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

大shourtcut - 如何设置LoginUsers和国家之间的关系。现在LoginUsers :: $ iCountryid将是一个国家对象,而不是一个ID。在数据库中,你会找到id的课程。

// ... 
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; 
    // ... 
} 
+0

谢谢你的反应速度快,我是新进的Zend TECHNOLOGIE和学说,这是一个很好的例子,但我仍然有一个问题有关的链接,结果我得到了阅读并应用该解决方案后,例如我为记录的国家ID是117,但是它获得的ID为234的对象我检查了查询但没有在SQL中应用联接。正在搜索为什么映射始终采用数据库中的最后一行或结果集不是确切的那一行? –

+0

噢,我做了以下从构造上的Countries类删除代码,因为每个用户只有1个国家,修复loginusers类中的映射:@ORM \ JoinColumn(name =“i_CountryID”,referencedColumnName =“id” ):* @ORM \ JoinColumn(name =“i_CountryID”,referencedColumnName =“pa_CountryID”)和宾果得到了正确的国家:),我在我的表中的所有关系父母--->得到了多重经验,但有些没有。我想我会学习更多关于它,当我与它合作。,这是一个公认的答案:)再次感谢你 –

0

“名称”从@ORM \表和@ORM \列属性代表了数据库中的表和字段名称,什么都没有改变,只是当你与之交互的PHP对象将是无下划线