Php DQL是否优于使用原则2的对象语法?

Php DQL是否优于使用原则2的对象语法?,php,orm,doctrine,doctrine-orm,Php,Orm,Doctrine,Doctrine Orm,我正试图掌握一些原则,有机会了解一些DQL的内容,并能够做一些简单的插入,如: function insert_user($username,$email,$password) { $user = new User(); $user->setUsername($username); $user->setEmail($email); $user->setPassword(md5($password)); try { //sav

我正试图掌握一些原则,有机会了解一些DQL的内容,并能够做一些简单的插入,如:

 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插入的内容:

DQL作为一种查询语言,具有SELECT、UPDATE和DELETE结构 映射到它们相应的SQL语句类型INSERT语句是 DQL中不允许,因为实体及其关系必须 通过 EntityManager#persist()以确保对象模型的一致性

不过,我同意您的看法,使用DQL插入可以帮助我们完成一些任务,包括在某些情况下更容易处理多对多关系