对于任何应用程序来说,一个最常见和最具挑战的任务,就是从数据库中读取和持久化数据信息。尽管symfony框架并未整合任何需要使用数据库的组件,但是却紧密集成了一个名为 Doctrine 的三方类库。Doctrine的主要目标是为你提供一个强有力的工具,令数据库互动更加轻松和灵活。
配置数据库
(略):各个框架集成的database_config各不相同,自己配置就好
创建一个Entity类
假设你正构建一套程序,其中有些产品需要展示。即使不考虑Doctrine或者数据库,你也已经知道你需要一个Product对象来呈现这些产品。在你AppBundle的Entity目录下创建这个类:
// src/AppBundle/Entity/Product.php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="product") */ class Product { /** * @ORM\Column(type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\Column(type="string", length=100) */ private $name; /** * @ORM\Column(type="decimal", scale=2) */ private $price; /** * @ORM\Column(type="text") */ private $description; }
即是建表一样,设置好每个字段的格式,长度。考验你SQL基础的时候
创建数据表/Schema
现在你有了一个包含映射信息的可用Product类,因此Doctrine确切地知道如何持久化它。当然,你还没有相应的Product数据表在库中。幸运的是,Doctrine可以自动创建所有的数据表。要这么做,运行以下命令:
php bin/console doctrine:schema:update --force
它会比较你的数据库 理论上应该是 什么样子的(基于你的entities的映射信息)以及 实际上 它应该是什么样,然后执行所需的SQl语句来将数据库的schema 更新到 它所应有的样子。换句话说,如果你添加了一个包含“映射元数据”(mapping metadata)的新属性到Product并运行此任务,它将执行所需的 “ALTER TABLE” 语句,向已经存在的Product表添加那个新列。