对于任何应用程序来说,一个最常见和最具挑战的任务,就是从数据库中读取和持久化数据信息。尽管symfony框架并未整合任何需要使用数据库的组件,但是却紧密集成了一个名为 Doctrine 的三方类库。Doctrine的主要目标是为你提供一个强有力的工具,令数据库互动更加轻松和灵活。

配置数据库

(略):各个框架集成的database_config各不相同,自己配置就好

创建一个Entity

假设你正构建一套程序,其中有些产品需要展示。即使不考虑Doctrine或者数据库,你也已经知道你需要一个Product对象来呈现这些产品。在你AppBundleEntity目录下创建这个类:

// 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表添加那个新列。