2011-09-04 64 views
0

我試圖讓學說掛起,並有機會看一些DQL的東西,已經能夠做這樣一些簡單的插入:是DQL比使用Doctrine 2的對象語法更好嗎?

function insert_user($username,$email,$password) 
     { 
$user = new User(); 
$user->setUsername($username); 
$user->setEmail($email); 
$user->setPassword(md5($password)); 

    try { 
      //save to database 
      $this->em->persist($user); 
      $this->em->flush(); 
     } 
     catch(Exception $err){ 

      die($err->getMessage()); 

      return false; 
     } 
     return true; 
     } 

但是我來講我還是挑戰如何做一個像用戶名/密碼認證程序。比如我有:

function validate_user($username,$password) 
      { 
$query = $this->em->createQuery('SELECT u from User u WHERE u.username = :name AND u.username = :name2'); 
$query->setParameters(array(
    'name' => $username, 
    'name2' => $password, 
)); 
$users = $query->getResult(); // array of user objects 
      } 

這裏是我的實體類:

<?php 



use Doctrine\ORM\Mapping as ORM; 

/** 
* User 
* 
* @Table(name="user") 
* @Entity 
*/ 
class User 
{ 
    /** 
    * @var integer $id 
    * 
    * @Column(name="id", type="integer", nullable=false) 
    * @Id 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string $username 
    * 
    * @Column(name="username", type="string", length=300, nullable=false) 
    */ 
    private $username; 

    /** 
    * @var string $email 
    * 
    * @Column(name="email", type="string", length=300, nullable=false) 
    */ 
    private $email; 

    /** 
    * @var string $password 
    * 
    * @Column(name="password", type="string", length=300, nullable=false) 
    */ 
    private $password; 


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

    /** 
    * Set username 
    * 
    * @param string $username 
    */ 
    public function setUsername($username) 
    { 
     $this->username = $username; 
    } 

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

    /** 
    * Set email 
    * 
    * @param string $email 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 
    } 

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

    /** 
    * Set password 
    * 
    * @param string $password 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 
    } 

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

我想我可以計算出來的DQL但是也不太清楚如何使用對象語法來做到這一點。

我希望我的問題有意義,因爲我只是想熟悉。

再次感謝

回答

1

根據doctrine 2 documentation不能插入使用DQL:

DQL的查詢語言有SELECT,UPDATE和DELETE結構是 映射到其對應的SQL語句類型。 INSERT語句爲 不允許在DQL中,因爲實體及其關係必須通過 引入到持久性上下文中通過 EntityManager#persist()來確保對象模型的一致性。

但是,我同意你的看法,使用DQL插入可以幫助我們完成一些任務,包括多對多的關係在某些情況下更容易。