什么是框架?什么是Doctrine 2?

时间:2014-03-02 16:41:06

标签: php mysql frameworks doctrine-orm

我知道一些HTML,PHP,CSS和MySQL。我还没有掌握的东西是框架。我正在尽力阅读他们是什么以及他们做了什么,但对于我的生活,我无法理解。

请有人以非常简单的方式解释框架和Doctrine 2,因为我不知道从哪里开始,但请注意它们肯定是必需的。

1 个答案:

答案 0 :(得分:11)

我可以告诉你一个框架是什么,但问题What is a software framework?的答案已经完成了。

所以,关于Doctrine。它是一个对象关系映射器(ORM)。它基本上允许您在关系数据库中插入/更新/选择/删除对象,或通过类生成/更新表。

我们假设一个简单的Member表:

Simple table structure

通常,您可以编写查询,例如,在表中插入内容。如:

INSERT Member VALUES ('Andy', 'andy@example.com', 30);

ORM允许您执行的操作是将映射对象插入表中。通过查询插入表格中的值就像通常看到的那样。

让我们看一下Symfony框架中一个非常简单的Doctrine示例:

namespace ExampleProject\MemberBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
* Member
* @ORM\Table()
* @ORM\Entity
*/
class Member {
     /**
     * @var integer
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
     private $id;

    /**
    * @var string
    * @ORM\Column(name="name", type="string", length=255)
    */
    private $name;

    /**
    * @var string
    * @ORM\Column(name="email", type="string", length=255)
    */
    private $email;

    /**
    * @var string
    * @ORM\Column(name="age", type="integer", length=3)
    */
    private $age;

    /* getters and setters here */
}

上面的类被映射(用DocBlocks注释)并表示我们的Member表,描述哪些部分将被视为数据库中的列。简单地说:类中的映射变量将作为数据库中的列显示。您还可以通过映射这些变量来确定,您希望列具有哪种数据类型(字符串/整数等)。

现在在我的代码中,我能够调用Doctrine实体管理器,创建一个新的Member对象,启动属性并将其保存到数据库中,采用一种很好的面向对象语法:

    $em = $this->getDoctrine()->getEntityManager();
    $member = new Member;
    $member->setId($id);
    $member->setName($name);
    $member->setEmail($email);
    $member->setAge($age);
    $em->persist($member);
    $em->flush();

如您所见,我们需要做的就是调用将对象保存在数据库中。在后台,ORM还执行INSERT查询(类似于我上面提到的查询)。您甚至可以启用设置以查看执行的实际查询。

现在这可能看起来很不必要而且工作很多。但它会为你节省很多时间。从源代码的角度来看,它更面向对象,并且您将能够比不使用ORM更好地维护您的(中/大)应用程序。此外,如果您当前将MySQL作为数据库,但是您希望将其更改为例如PostgreSQL,则可以对代码进行最少的更改,因为您的ORM将负责基础查询。

因此,实质上, ORM是一个具有面向对象语法的数据库抽象层