在我的以前一章Symfony之十分钟入门说了怎样生成数据库,然后设计实体Entity,再同步数据库的表结构,一般我们的顺序都是这样:生成数据库->设计实体Entity->同步数据库表结构。

但是如果你想要在设计Entity前,先自己创建数据库和表结构,再生成Entity;或者是在设计Entity,同步数据库表结构之后,Entity文件全部误删丢失想找回来。下面介绍方法。

我们来做一个例子:

1.创建两张表:section,article

2.生成.orm.xml文件

$ php app/console doctrine:mapping:import --force SiteHomeBundle xml

这个命令行让Doctrine检查数据库并生成XML元数据文件到src/Site/HomeBundle/Resources/config/doctrine文件夹下。
新生成了两个文件:

Section.orm.xml

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Site\HomeBundle\Entity\Section" table="section">
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="name" type="string" column="name" length="20" nullable="false"/>
</entity>
</doctrine-mapping>

Article.orm.xml

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Site\HomeBundle\Entity\Article" table="article">
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="title" type="string" column="title" length="20" nullable="false"/>
<field name="content" type="text" column="content" nullable="false"/>
<field name="author" type="string" column="author" length="10" nullable="false"/>
</entity>
</doctrine-mapping>

3.生成实体Entity

元数据文件生成后,可以用下面的命令来构建相关的实体Entity

1
2
$ php app/console doctrine:mapping:convert annotation ./src
$ php app/console doctrine:generate:entities SiteHomeBundle --no-backup

第一个命令生成annotation注释映射的实体Entity类;
第二个命令生成整个SiteHomeBundle下每个Entity类的get,set方法
但是,如果你想使用YAML或XML代替annotation映射注释,你只需要执行第二个命令。
如果你想使用annotations,你可以在使用这两个命令之后安全的删除.orm.xml文件。
现在两个实体Entity就生成成功了。

在src/Site/HomeBundle/Entity文件夹下

Section.php

<?php

namespace Site\HomeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Section
*
* @ORM\Table(name="section")
* @ORM\Entity
*/
class Section
{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=20, nullable=false)
*/
private $name; /**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id; /**
* Set name
*
* @param string $name
* @return Section
*/
public function setName($name)
{
$this->name = $name; return $this;
} /**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
} /**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}

Article.php

<?php

namespace Site\HomeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Article
*
* @ORM\Table(name="article")
* @ORM\Entity
*/
class Article
{
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=20, nullable=false)
*/
private $title; /**
* @var string
*
* @ORM\Column(name="content", type="text", nullable=false)
*/
private $content; /**
* @var string
*
* @ORM\Column(name="author", type="string", length=10, nullable=false)
*/
private $author; /**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id; /**
* Set title
*
* @param string $title
* @return Article
*/
public function setTitle($title)
{
$this->title = $title; return $this;
} /**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
} /**
* Set content
*
* @param string $content
* @return Article
*/
public function setContent($content)
{
$this->content = $content; return $this;
} /**
* Get content
*
* @return string
*/
public function getContent()
{
return $this->content;
} /**
* Set author
*
* @param string $author
* @return Article
*/
public function setAuthor($author)
{
$this->author = $author; return $this;
} /**
* Get author
*
* @return string
*/
public function getAuthor()
{
return $this->author;
} /**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}

Doctrine将所有的表字段都转换为私有的注释类属性。他还找到了表的主键,Doctrine强大在如果你的表之间有表关联模型,Doctrine生成的Entity类都能在注释映射中表现出各Entity类之间的映射关系。

Symfony2 Doctrine从现有Database生成Entity(转载自http://blog.it985.com/6809.html)的更多相关文章

  1. 记录一下idea自动生成Entity

    最近在鼓捣spring -boot ,真好用,学习到jpa. 通过生成Entity 文件,能够快速的生成数据库,并且使用 JpaRepository 的基本增删查改 方法,好用的一批. 可是随之,问题 ...

  2. IDEA 通过数据库生成entity实体类

    IDEA利用数据库生成entity类教程 1.在左上角有一个View 选项 2. 然后选择 TOOL Windows 3. 然后选择Database然后会弹出一个窗口 4.选择+号 5.选择data ...

  3. SpringBoot--Easycode、mybatisX插件生成entity,controller,service,dao,mapper IDEA版 项目提效神器

    一.介绍 Easycode是idea的一个插件,可以直接对数据的表生成entity,controller,service,dao,mapper,无需任何编码,简单而强大. MybatisX 是一款基于 ...

  4. java自动生成entity文件

    网上关于自动生成entity文件的代码很多,看了很多代码后,在先辈们的基础上再完善一些功能(指定多个表,全部表). 为了使用方便所以把两个类写在一个java文件中,所以大家可以直接拿这个java文件, ...

  5. 【Mybatis】使用Mybatis-Generator自动生成entity、dao、mapping

    使用过mybatis的应该都有用过Mybatis-Generator,本文主要介绍使用Mybatis-Generator来自动生成entity.dao.mapping文件. Mybatis-Gener ...

  6. 联想笔记本 thinkpad BIOS 超级密码 Supervisor Password 清除 破解 亲测有效 转载地址https://blog.csdn.net/ot512csdn/article/details/72571674

    联想笔记本 thinkpad BIOS 超级密码 Supervisor Password 清除 破解 亲测有效 转载地址https://blog.csdn.net/ot512csdn/article/ ...

  7. R语言中的正则表达式(转载:http://blog.csdn.net/duqi_yc/article/details/9817243)

    转载:http://blog.csdn.net/duqi_yc/article/details/9817243 目录 Table of Contents 1 正则表达式简介 2 字符数统计和字符翻译 ...

  8. (SpringBoot-Jpa)使用Idea数据库自动脚本Generate POJOS生成 Entity对象,

    因:使用SpringBoot -jpa,需要手动配置Entity 但是如果你的表中有很多属性,或者有很多表怎么办?? 每个手动写? 还是用mybatis.写mapper??? 解决:使用idea自动工 ...

  9. 从SqlServer现有数据生成Insert脚本

    步骤1,打开"Generate and Publish Objects"向导.右键点击要导出数据的数据库,选择Taks->GenerateScript 步骤2,选择要导出数据 ...

随机推荐

  1. C语言---return(我的工程笔记本)

    迷惑了一天  函数就是输出有问题,进入函数设置密码的时候,当我保存密码准备返回,问题就在此时诞生了,界面是主界面,但功能函数还是没反应,设置序列号初始值的原来按键却还是有反应,莫名其妙,莫名其妙... ...

  2. 利用ARM批量自动化创建SSD多磁盘RAID0虚拟机

    在实际生产环境大规模部署的时候,有时需要能批量创建多台Linux虚拟机,并且该虚拟机带多个硬盘,一些数据库环境,比如MySQL和MongoDB等,会需要超过10000de IOPS, 那么创建的虚拟机 ...

  3. Eclipse快捷键集结

    Debug快捷键 F5单步调试进入函数内部.   F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的.   F7由函数内部返回到调用处.   F8一直执行到下一个 ...

  4. vsftpd允许root用户登录

    Linux下安装vsftpd之后,默认的配置是 匿名用户可以登录,匿名帐户有两个: 用户名:anonymous 密码:空 用户名:ftp 密码:ftp 如果要用匿名进行上传删除等操作需要配置其它参数. ...

  5. 在O(1) 时间删除链表节点

    struct Node { int val; Node * next; }; void deleteNode(Node ** head, Node * target) { assert(head != ...

  6. BZOJ2292: 【POJ Challenge 】永远挑战

    2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 513  Solved: 201[Submit][ ...

  7. Android中各种onTouch事件

    Android里有两个类 android.view.GestureDetector android.view.GestureDetector.SimpleOnGestureListener 1) 新建 ...

  8. eclipse中使用loadrunner java api步骤

    1.使用Eclipse新建一个Java工程,名字任意 2.将"%LoadRunner_Home%\classes\lrapi"目录拷贝到工程中 3.将工程导出为Jar包,譬如:命名 ...

  9. editplus批量删除html代码空行

    在editplus替换菜单功能里,“查找”功能里输入: ^[ \t]*\n 替换为空,然后“全部替换”即可. 替换时,要选择“正则表达式”选项, 详细:http://www.dedecms8.com/ ...

  10. JSON解析---初识

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 全然独立于语言的文本格式 易于人阅读和编写 易于解析和生成 (网络传输速度快) JSON语法规则 数据在 ...