---恢复内容开始---

下面用Doctrine2设置配置一个数据库,具体分为以下步骤

1.设计主要字段和表

2.配置symfony2和数据库的连接

3.配置Entity,定义类

4.实现get/set/Reposistory

5.生成数据库

先记录一个坑

这里在配置entity时,执行命令php app/console generate:doctrine:entities ScourgenWebBundle会有错误产生

[Doctrine\Common\Annotations\AnnotationException]
[Semantical Error] The annotation "@Doctrine\ORM\Mapping\GenerateValue" in property Scourgen\WebBundle\Entity\user:
:$id does not exist, or could not be auto-loaded.

可以经过检查明明是,$id明明定义了,查阅各种资料无果,最后尝试将protect $id放在ID的annoation之前,就成功了,不太明白原理,反正是个坑吧,

网上目前也没有搜索到解决方法。但是这样子就可以了,希望遇到同样问题的朋友可以这样子解决,欢迎讨论其中原理。这样子不行,之后还是会有错误,,,,,等我再搜索搜索

.............原来是一个简单的地方拼写错误导致无法识别,佛了!!!!!!!!!!!!!!之前成功是因为跳过了id字段,

1.第一步,设计主要字段和表,如图

昨天晚上写完忘记保存了,,,,,,,这里简单来说一下表之间的关系吧

user和profile   一对一关系

user和book   多对多关系

book 和category  多对多关系

book和author  多对一关系

author和category 一对多关系

2.设计数据库和symfony的连接,

这一步很简单,就是改变symfony项目当中app/config/php文件之中的参数即可,改为本地mysql数据库参数

3.配置Entity,定义类

首先说一下我对这一步的理解,实质上来讲就是将数据库当中的表映射为php的类,这样子,我们来在操作数据库时,需要进行各种sql语句的书写,但是如果映射到类,各种操作就可变为

直接对一个对象进行操作,调用各种方法,doctrine会帮我们自动生成sql语句,操作数据库,这样就可极大的提高开发效率。并且在创建表时,我们也是只需要定义php的各种类,之后进行

php app/console doctrine:generate:entities 以及doctrine:schema:update 命令更新数据库,这样就会自动在数据库当中生成表。生成之前,可以用 dectrine:schema:validate检查annoatation

是否正确,以便后续更新数据库。

接下来先对deoctrine\ORM\Mapping  的一对一,一对多,多对多,加入表等模块进行学习,之后运用进行entity的配置

这里附上doctrine的官方文档之中关于working with Object

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-objects.html#

下面用代码进行简单的说明

use Doctrine\ORM\Mapping\OneToOne;
use Doctrine\ORM\Mapping\ManyToMany;
use Doctrine\ORM\Mapping as ORM;
//剩下的模块导入类似,这里不再说说明
/**
*设置生成的repository的名字,这里绝对路径,前面要用namespace
*@ORM\Entity(repositoryClass="AuthorRepository")
*@ORM\Table(name="author") 数据库当中表的名字
*/
class Author{
/**
*@ORM\Id 说明是主键
*@ORM\Column(type="integer") 说明字段类型
*/
protected $id;
/**
*@Column(type="string") 定义普通的字段只需说明类型
*/
protected $name;
/**
*@OneToMany(targetEntity="Book",mappedBy="author")
一对多关系,指向目标entity,mappedBy参数代表映射字段, */
protected $books;
}

下面演示book_entity,即多对一关系和多对多关系的书写方法

//use 同上,省去
/**
*@ORM\Entity(repositoyClass="BookRepository")
*@ORM\Table(name="book") 同上
*/ class Book{
//这里不进行重复演示
/**
*多对一关系,和author当中的books对应,由于多对一关系
*所以需要在多的那个表当中添加外键,指向一表的id字段(JoinColumn)
*@ManyToOne(targetEntity="Author",inversedBy="books")
*@JoinColumn(name="author_id",referencedColumnName="id")
*/
protected $author;
/**
*多对多关系,category和book,JoinTable()加入一个新表进行连接,JoinColumns和inverseJoinClolumns设定新表当中的字段,也可以不设置,
*自动生成,这里需要注意inversedBy和mappedBy,这边用了inversedBy,与之对应的ManyToMany就需要用mappedBy,并且在inversedBy这边JoinTable,
*ManyToMany(targetEntity="Category",inversedBy="books")
*JoinTable(name="books_categories",
*joinColumns={@JoinColumn(name="book_id", referencedColumnName="id")},
*inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id")})
*/
  private $categories;
}
class Category{
/**多对多关系的另一面,使用mappedBy
   *@ManyToMany(targetEntity="Book",mappedBy="categories") 
  */
  private $books;
}

这里基本说明完了三种对应关系,除此之外,由于存在一对多和多对多关系,所以有一些属性是以数组的形式存在的,这里使用ArrayCollection数组比array更高级,可以即时更新(简单理解,具体网上查)

use Doctrine\Common\Collections\ArrayCollection;

这样就需要书写构造函数

public function __construt(){
$this->books = new ArrayCollection();
//其他数组类似
}

接下来第一步构造的表关系就可以进行Entity的定义了,需要注意annoation当中的拼写细节等,可以用doctrine:schema:validate进行验证

4.生成repositoryClass很简单,只需要在entity之前加上annoation即可,这样在执行entities命令时就会自动生成repository文件,以便后续书写该Entity的其他自定义方法

5.生成数据库也很简单,doctrine:schema:update   命令(前面都要加上php app/console)

Doctrine2-完整创建数据库的更多相关文章

  1. Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

    Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般 ...

  2. MongoDB创建数据库和集合命令db.createCollection详解(转)

    切换/创建数据库 use yourDB;  当创建一个集合(table)的时候会自动创建当前数据库 完整的命令如下:db.createCollection(name, {capped: <Boo ...

  3. [转]Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

    本文转自:http://www.cnblogs.com/wuhuacong/archive/2012/03/09/2387680.html Oracle中对数据对象和数据的管理,无疑都是使用PL/SQ ...

  4. VBS创建数据库

    '创建数据库'参数:strDBPath 字符串型 数据库文件的完整路径Sub CreateDataBase(strDBPath)Dim catObjSet catObj = CreateObject( ...

  5. sql2008 计划自动创建数据库分区【转】

    本文转自:http://jingyan.baidu.com/article/6b97984d9a26ec1ca3b0bf77.html sql2008 计划自动创建数据库分区 固定增量的数据,自动创建 ...

  6. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.2 安装数据库软件 这部分简短讲 ...

  7. SQLite使用教程4 创建数据库

    http://www.runoob.com/sqlite/sqlite-create-database.html SQLite 创建数据库 SQLite 的 sqlite3 命令被用来创建新的 SQL ...

  8. 【Android】数据库的简单应用——创建数据库

    SQLiteOpenHelper是一个抽象类,要使用它必须写一个类继承它.SQLiteOpenHelper有两个抽象方法onCreate()和onUpgrade(),我们要在类里面重写这两个方法来实现 ...

  9. SQLite 创建数据库(http://www.w3cschool.cc/sqlite/sqlite-create-database.html)

    SQLite 创建数据库 SQLite 的 sqlite3 命令被用来创建新的 SQLite 数据库.您不需要任何特殊的权限即可创建一个数据. 语法 sqlite3 命令的基本语法如下: $sqlit ...

  10. Windows下Oracle创建数据库的3种方式

    1.   Creating a Database with DBCA DatabaseConfiguration Assistant (DBCA) is the preferred way to cr ...

随机推荐

  1. dl,dt,dd标签的使用

    dl就是定义一个列表 dt说明白了就是这个列表的标题dd就是内容,能缩进和UL,OL性质差不多 <dl> <dt>标题标题</dt> <dd>内容内容& ...

  2. photoshop编辑pdf文件

    对于PDF文件透明背景的问题 PDF文件背景是透明的,如何使其变成白色 怎样通过photoshop打开多页PDF,编辑后仍保存为多页 注意shift全选,"页面选项"处的'裁剪到' ...

  3. LoadRunner【第四篇】参数化

    参数化的定义及使用场景 定义:将脚本中的特定值用变量替代,该变量值是变化的(注意:这个值是我们自己创建的,不是服务器返回的). 使用参数化: 1.业务考虑,不允许相同信息 2.真实模拟不同用户 3.真 ...

  4. mongodb 3.6 集群搭建:分片+副本集

    mongodb是最常用的nosql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

  5. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)

    引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一   的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...

  6. NLTK基础

    Python上著名的⾃然语⾔处理库 ⾃带语料库,词性分类库 ⾃带分类,分词,等等功能 强⼤的社区⽀持 还有N多的简单版wrapper 安装语料库 # 方式一 import nltk nltk.down ...

  7. Hbase G1 gc 调优最终参数

    export HBASE_HEAPSIZE=16384export HBASE_OFFHEAPSIZE=25gexport HBASE_MASTER_OPTS="$HBASE_MASTER_ ...

  8. MongoDB实战性能优化

    1. 性能优化分类 mongodb性能优化分为软件层面和操作系统层面. 软件层面,一般通过修改mongodb软件配置参数来达到,这个需要非常熟悉mongodb里面的各种配置参数: 而操作系统层面,相对 ...

  9. [物理学与PDEs]第5章习题5 超弹性材料中客观性假设的贮能函数表达

    设超弹性材料的贮能函数 $\hat W$ 满足 (4. 19) 式, 证明由它决定的 Cauchy 应力张量 ${\bf T}$ 满足各向同性假设 (4. 7) 式. 证明: 若贮能函数 $W$ 满足 ...

  10. 《css网站布局实录》(李超)——读书札记

    1.web表现层技术 2.HTML链接设计思想 3.对信息进行合理的分析.分类与处理来创造商业价值. 4.头部描述浏览器所需信息,主体包含所需要展现的具体内容. 5.HTML(XHTML)XML 6. ...