2012-02-04 50 views
0

我正在嘗試學習Doctrine2,並且在實體和映射周圍纏繞我的大腦以及如何從數據庫中提取數據時遇到了一些麻煩。實體和原則中的映射

如果我理解正確,將爲我的數據庫中的數據(如用戶或產品)創建一個實體。

這就是我要掛掉的地方。我有一個簡單的數據庫,像User和類似的表。我是否需要創建一個名爲「用戶」的實體?並且該實體是否從用戶表中提取數據,然後從用戶實體獲取數據?

有人可以提供我一個如何做到這一點的代碼示例?

回答

0

實體是普通的PHP類...首先你必須創建你的表,然後你創建你的實體。類的屬性應該與setter和getter私有,並且通常與表中的字段具有相同的名稱。當你想在數據庫中添加新記錄時,你必須創建你想要的類的實例並設置值,然後持久化並刷新實體管理器。示例代碼:

<?php 

namespace Entity; 

/** 
* @Entity 
* @Table(name="users") 
*/ 
class User { 

    /** @Id 
    * @Column(type="integer") 
    * */ 
    private $id; 

    /** @Column(type="string") */ 
    private $username; 

    /** @Column(type="string") */ 
    private $password; 

    /** @Column(type="boolean") */ 
    private $active; 

    public function getId() { 
    return $this->id; 
    } 

    public function setId($id) { 
    $this->id = $id; 
    } 

    public function getUsername() { 
    return $this->username; 
    } 

    public function setUsername($username) { 
    $this->username = $username; 
    } 

    public function getPassword() { 
    return $this->password; 
    } 

    public function setPassword($password) { 
    $this->password = $password; 
    } 

    public function getActive() { 
    return $this->active; 
    } 

    public function setActive($active) { 
    $this->active = $active; 
    } 

} 

和當u想提出一個新的紀錄:

$user = new Entity\User(); 
$user->setName('users name'); 
$user->setPassword('password'); 
$entityManager->persist($user); // put that entity in queue; 
$entityManager->flush(); // execute all pending entities 

如果妳想要得到現有記錄

$found = $entityManager->find('className', $id); // search by id 

or $entityManager->getRepository('className')->findOneBy(array('field', 'value'));