Doctrine2-基础概念
使用框架操作数据库的几个要求
1.安全,比如防止sql注入等,pdo里面prepare,execute 就可以
2.性能,数据库操作是最基本的操作,频繁使用,需要考虑到执行效率
3.ORM(object relation mapper)可以将数据映射到一个类当中,pdo也是支持的,
4.支持多种数据库(不常用)
5.能使用第三方插件,比如现在需要对五个表进行排序,可以将排序功能封装起来,每个表都可以使用去实现各自的排序功能,这时就可以从网上下载第三方代码,只需要继承该代码
即可实现排序功能。即自动实现相同功能的集合
。。。。很明显Doctirne这些条件都满足了
下面我们对Doctirne2先进行一个预览
/**
* @Route("/")
*/
class DefaultController extends Controller
{
/**
* @Route("/index",name="page_index")
* @Template()
*/
public function indexAction()
{
$user = $em->getRepository('User')->findOneBy(array("id"=>1));
$user->setName("test"); foreach($user->getAdressBooks() as $adressBook){
echo $adressBook->getName();
}
$em->presist($user);
$em->flush(); }
}
可以看到,首先$em是传进来的一个对象,getRepositor('User')获取user信息,之后以id为1进行分类,返回一个用户数组给$user
,setName() 对用户的名字进行设置,$em->presist()将我们更改的信息交给$em托管,之后$em会自动进行处理,生成一个update语句,更改表中id为1的名字,flush() 刷新即完成更改。
中间的getAdressBooks,是假定user表和adressbooks表示一对多的关系,获取该用户对应的所有adressbooks,遍历并输出其name。、
可以看到没有像之前一样,编写复杂的sql语句进行查询更新,就完成了这些操作。在symfony网页下方也可以查看生成的sql语句
下面先了解几个基本的doctrine2概念,之后进行配置
1.Entity
类似于一个对象, 里面有各种字段以及属性,并且像mysql一样,其间有各种关系。比如刚才所用$em就是
2.Repository
一个操作集合,比如前面的getRepository()->findOneBy();将查找用户操作放在getRepository里面,选取相应的操作即可,
将数据库相关的业务逻辑操作封装起来,直接调用就行,
3.Proxy
像之前的$user,他并不是一开始就将所有SQL语句都生成出来,将所有信息都存放在$user之中,而是当你需要哪个信息的时候,
他才生成sql语句,执行查询操作,得到相应数据,相当于句动态查询的。
而当还没有查询之前的$user,就处于proxy状态,虚拟状态,用到的时候才会将其 实例化进行使用.
4.DQL语句
构建查询语句,比sql更简单一些,
$query = $em->createQuery(
select u from database:User p where u.name=:name'
)setParameter('name','scourgen');
上面的例子就是一个dql查询语句
下面的例子和上面的等价,不过是动态构建了一个DQL语句,更为面向对象化,可以将每一个语句都当做一个方法去替换他
$query = $em->getRepository('User')->createQueyBuilder('U')
->where('u.name=:name')
->setParmameter('name','scourgen')
->getQuery();
5.事件监听机制
比如现在有一个事件会做很多事情,如果要每次都手动都添加时间戳进行记录,会很麻烦。所以DOCTRINE2为我们提供了这种自动监听机制,不需要去手动监听
Doctrine2-基础概念的更多相关文章
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- TCP/IP基础概念及通信过程举例
TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...
- Jmeter基础之---jmeter基础概念
Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
- 理解 angular2 基础概念和结构 ----angular2系列(二)
前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...
- JavaBean 基础概念、使用实例及代码分析
JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...
- RabbitMQ基础概念详细介绍
http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...
- linux设备驱动归纳总结(二):模块的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...
- linux设备驱动归纳总结(一)内核的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...
- 什么是JavaScript闭包终极全解之一——基础概念
本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...
随机推荐
- MySQL——修改数据库远程权限
语句 赋予权限 ON *.*前一个*代表库后一个代表表 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxxxx' WITH GRA ...
- HDOJ 5639 Transform
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5637 题意:有一个数x,你可以对x进行两种操作,1.反转x二进制其中任意一位2.x^y(y题目给出), ...
- MT【316】常数变易法
已知数列$\{a_n\}$满足$a_1=0,a_{n+1}=\dfrac{n+2}{n}a_n+1$,求$a_n$ 解答:$\dfrac{a_{n+1}}{n(n+1)}=\dfrac{a_n}{n( ...
- pytest 11 allure2生成html报告
allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面. 环境准备 1.pyt ...
- jdbc批处理进行多条数据插入
package cn.linjun.demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.S ...
- filebeat+logstash配置
一. filebeat.yml的配置 filebeat.prospectors:- input_type: log paths: - /tmp/logs/optimus-activity-api.lo ...
- 神经网络3_M-P模型
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程,QQ:231469242) https://study.163.com/course/introduction.htm?courseId ...
- makefile $@, $^, $<, $? 表示的意义
ref:https://www.cnblogs.com/gamesun/p/3323155.html $@ 表示目标文件$^ 表示所有的依赖文件$< 表示第一个依赖文件$? 表示比目标还 ...
- git for windows 本地仓库
1.安装 先在网上安装好git for windows的程序 在gitbash中输入以下 $ git config --global user.name "Your Name" $ ...
- [再寄小读者之数学篇](2014-06-20 求极限-L'Hospital 法则的应用)
设 $f\in C[0,+\infty)$, $a$ 为实数, 且存在有限极限 $$\bex \vlm{x}\sez{f(x)+a\int_0^x f(t)\rd t}. \eex$$ 证明; $f( ...