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

Mar*_*ooo 1 php mysql frameworks doctrine-orm

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

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

Mr.*_* AJ 11

我可以在这里告诉你框架是什么,但以下链接描述了它: 什么是软件框架?

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

我们假设一个简单的成员表(我无法发布图像)

id | 名字| 电子邮件| 年龄

http://i.stack.imgur.com/V443D.png

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

INSERT Member VALUES ('Andy', 'andy@example.com', 30);
Run Code Online (Sandbox Code Playgroud)

ORM允许您执行的操作是将映射对象插入表中.通过查询插入表中的值将与通常看到的一样.让我们看一下Symfony2框架中一个非常简单的学说示例:

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 */
}
Run Code Online (Sandbox Code Playgroud)

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

现在在我的代码中,我可以调用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();
Run Code Online (Sandbox Code Playgroud)

如您所见,我们需要做的就是将对象保存在数据库中.在数据库内部,它将向我们显示与执行上面提到的查询相同的结果.现在在后台,ORM也执行查询(类似于我上面提到的查询).您可以启用一个设置,您可以在其中查看执行的实际查询.

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