2014-02-10 128 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對象將是無下劃線