Doctirne---查询更新等操作
使用Doctrine进行mysql更删改查操作,事务处理,生命周期的管理
1.先记录最简单的插入操作
$em = $this->getDoctrine()->getManager(); //用doctrine进行管理 $book = new Book();
$book->setName(); //生成book对象并进行初始化 $em->persist($book); //交给doctrine管理,生成sql语句
$em->flush(); //执行sql语句,刷新数据库
2.查找操作,
一般查询需要使用repository,所以先提前写好获取repository的方法
//获取userRepository
/**
* @return \Scourgen\WebBundle\Entity\UserRepository
*/
protected function getUserRepository(){
return $this->getDoctrine()->getManager()->getRepository('ScourgenWebBundle:User');
} //获取book的
/**
* @return \Scourgen\WebBundle\Entity\BookRepository
*/
protected function getBookRepository(){
return $this->getDoctrine()->getManager()->getRepository('ScourgenWebBundle:Book');
}
接下来演示几个基本的查询操作
//有三种方法,findAll,findOneBy,findBy进行查询 //findBy 根据传入条件进行查询,返回一个数据集,可以使用foreach进行遍历
//这里看一下findBy的原型声明
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null);
//可以看出第一个参数是字段,第二个是按照某个字段进行排序,$limit限制返回数据条数,$offset不清楚暂时
//按照标题字段进行查询并按照price降序排序
/** @var $book \Scourgen\WebBundle\Entity\Book*/ 使用annoation表明$book是一个Book对象
$books = $this->getBookRepository()->finBy(array('title'=>'书本'),array('price'=>'DESC'));
foreach($books as $book){
echo "相应的数据操作";
}
//findOneBy
//先看一下fingOneBy函数原型,参数都类似,由于是查找一个,所以就没有offset和limit参数,只需要注意返回的只是一个对象,
public function findOneBy(array $criteria, array $orderBy = null);
//findAll() 这个简单,查找所有数据,一般不会用到
//这里暂时只学习这几个简单的,之后再进行补充
//还有的时候需要使用原生sql语句进行查询,具体流程如下
$sql = "select book.title from book where book.id =1 or book.id=2;";生成sql语句
$this->get("database_connection")->fetchAll($sql); //使用fetchAll方法进行查询,返回数据集,但是需要注意,这样返回的数据不是我们所定义的Book对象,而是原生的mysql对象
//删除操作更简单
先查找需要删除的数据,之后使用persist()交给doctrine进行托管,最后用$em->remove(); 方法从数据库当中删除数据
//这里说明以下doctrine的事务处理,
$em = $this->getDoctrine()->getManager();
$em->getConnection()->beginTransaction(); //开启事务
try{
//do something
$em->getConnection()->commit(); //提交事务
}catch(Exception $e){
$em->getConnection()->rollback(); //如果产生异常就返回
}
一般有一些更新操作我们会经常执行,比如创建时间,更新时间字段的记录,这里我们可以使用ORM\PrePersist和ORM\PreUpdate实现
前者是创建新的对象刷新数据库之前进行操作,而后者是在更新某个对象之前进行操作,比如我们可以在创建对象之后,更新数据之前,
对创建书写函数进行设置,又比如我们在更新操作执行之前,对更新时间书写函数进行自动设置,下面是例子
/**
* 在创建之前先进行的操作,记录时间
* @ORM\PrePersist()
*/
public function PrePersist(){
if($this->getCreateTime() == null) { //第一次创建则更新
$this->setCreateTime(new \Datetime('now'));
}
$this->setUpdateTime(new \Datetime('now')); //记录更新时间
}
/**
* 在更新之前进行的操作,更新时间
* 如果有很多表都有这个操作,可以创建一个基类,有这些方法,继承即可
* @ORM\PreUpdate()
*/
public function PreUpdate(){
$this->setUpdateTime(new \DateTime('now'));
}
Doctirne---查询更新等操作的更多相关文章
- 在SqlServer查询分析器里 访问远程数据库 进行数据查询更新等操作(openrowset)
启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1 reconfigure exec sp_config ...
- MongoDB中的映射,限制记录和记录拼排序 文档的插入查询更新删除操作
映射 在 MongoDB 中,映射(Projection)指的是只选择文档中的必要数据,而非全部数据.如果文档有 5 个字段,而你只需要显示 3 个,则只需选择 3 个字段即可. find() 方法 ...
- C#通过SqlConnection连接查询更新等操作Sqlserver数据库
Sqlserver数据库连接方式有多种,这里只介绍最常用的通过SqlConnection和Sqlserver数据库用户名和密码验证来进行操作数据库. 数据库连接字符串: string connStri ...
- Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]
在Yii的开发中常常需要去使用Yii的增删改查方法,这些方法又可以多次变化和组合,带来全方位的实现对数据库的处理,下面对这些方法做一些简单的整理和梳理,有遗漏或是BUG,敬请指出.灰常感谢!!! 一. ...
- es 查询更新操作
# es 查询更新操作# _*_ coding: utf-8 _*_ import time import datetime import pymysql from elasticsearch imp ...
- Hudi 数据湖的插入,更新,查询,分析操作示例
Hudi 数据湖的插入,更新,查询,分析操作示例 作者:Grey 原文地址: 博客园:Hudi 数据湖的插入,更新,查询,分析操作示例 CSDN:Hudi 数据湖的插入,更新,查询,分析操作示例 前置 ...
- PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
原文: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...
- LINQ to SQL更新数据库操作(转载)
使用LINQ to SQL建模Northwind数据库 在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型: 当使用LINQ to SQL设计器设计以上定义的五个类(Prod ...
- mysql查询更新时的锁表机制分析
为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级.MyISAM和MEMORY存储引擎采用的是表级锁(t ...
- mysql查询更新时的锁表机制分析(只介绍了MYISAM)
为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级.MyISAM和MEMORY存储引擎采用的是表级锁(t ...
随机推荐
- Android学习第九天
为什么需要内容提供者 a) 如何创建数据库 b) 文件权限 c) Chmod linux修改权限 内容提供者原理 a) 内容提供者把数据进行封 ...
- shell脚本自动化部署服务
shell脚本自动化部署 !/bin/bash #export PATH=$PATH:/export/maven/bin run_flag_dir="/data0/shell/deploy_ ...
- poj 2955 Brackets (区间dp 括号匹配)
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum (数位dp求和)
题目链接:https://codeforces.com/contest/1073/problem/E 题目大意:给定一个区间[l,r],需要求出区间[l,r]内符合数位上的不同数字个数不超过k个的数的 ...
- 初识 go 语言:语法
目录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句, ...
- 【洛谷P3605】晋升者计数
题目大意:给定一棵 N 个点的树,点有点权,求对于每个点来说,以该点为根的子树内比该点点权小的点的个数. 题解:考虑对于每个点开一棵权值线段树.递归过程中,将子树的信息合并到父节点上,统计答案后,再将 ...
- html页面中引入自签名证书的js web资源出现net::ERR_CERT_AUTHORITY_INVALID
其实是浏览器客户端对自签名的内容认为不安全引起的,临时方法可以再浏览器中先直接访问下那个自签名的https地址,然后再访问有引用的那个页面就可以了. 以下内容引用自https://www.morong ...
- 快速定位XPATH
本文主要介绍如何快速定位WEB端的xpath. 浏览器:Chrome.火狐浏览器 两种浏览器的定位方法都是一样:按F12键,可查看开发者工具 上图,开发者工具最左上角是定位按钮,点击此按钮,再点击浏览 ...
- C# 插件化方案(Add-In)
白话插件框架原理 WPF 插件开发(.NET Framework 3.5 System.Addin) 原文:AddIn Enabled Applications
- 双系统下Ubuntu扩展根目录空间方法
最近,在Ubuntu16.04上装了个matlab,突然发现根目录空间只剩1G了,这哪儿够用啊,就想着有没有一种方法不用重装系统就可以扩展根目录空间呢?别说还真有,看下文. 开始之前先分出一些未分配空 ...