使用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---查询更新等操作的更多相关文章

  1. 在SqlServer查询分析器里 访问远程数据库 进行数据查询更新等操作(openrowset)

    启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1 reconfigure exec sp_config ...

  2. MongoDB中的映射,限制记录和记录拼排序 文档的插入查询更新删除操作

    映射 在 MongoDB 中,映射(Projection)指的是只选择文档中的必要数据,而非全部数据.如果文档有 5 个字段,而你只需要显示 3 个,则只需选择 3 个字段即可. find() 方法 ...

  3. C#通过SqlConnection连接查询更新等操作Sqlserver数据库

    Sqlserver数据库连接方式有多种,这里只介绍最常用的通过SqlConnection和Sqlserver数据库用户名和密码验证来进行操作数据库. 数据库连接字符串: string connStri ...

  4. Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]

    在Yii的开发中常常需要去使用Yii的增删改查方法,这些方法又可以多次变化和组合,带来全方位的实现对数据库的处理,下面对这些方法做一些简单的整理和梳理,有遗漏或是BUG,敬请指出.灰常感谢!!! 一. ...

  5. es 查询更新操作

    # es 查询更新操作# _*_ coding: utf-8 _*_ import time import datetime import pymysql from elasticsearch imp ...

  6. Hudi 数据湖的插入,更新,查询,分析操作示例

    Hudi 数据湖的插入,更新,查询,分析操作示例 作者:Grey 原文地址: 博客园:Hudi 数据湖的插入,更新,查询,分析操作示例 CSDN:Hudi 数据湖的插入,更新,查询,分析操作示例 前置 ...

  7. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  8. LINQ to SQL更新数据库操作(转载)

    使用LINQ to SQL建模Northwind数据库 在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型: 当使用LINQ to SQL设计器设计以上定义的五个类(Prod ...

  9. mysql查询更新时的锁表机制分析

    为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级.MyISAM和MEMORY存储引擎采用的是表级锁(t ...

  10. mysql查询更新时的锁表机制分析(只介绍了MYISAM)

    为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级.MyISAM和MEMORY存储引擎采用的是表级锁(t ...

随机推荐

  1. 虚拟机iso整理

    供个人备用,随缘补充 ubuntu-16.04.6-desktop-amd64.iso 资源: https://pan.baidu.com/s/1ZR_5jgzNsGeOrkE6hAqxEA 提取码: ...

  2. Addrss already in user 解决方案 (linux)

    Addrss already  in user 解决方案 查pid netstat -lptu 查看当前用户的进程 pid kill -9 pid 杀进程 重复上面步骤一次, 因为一遍杀不死.他会换一 ...

  3. Matlab 中movie函数的使用

    MATLAB中,创建电影动画的过程分为以下四步: step1:调用moviein函数对内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一 ...

  4. 川普和习G-20会面为缓和中美贸易战提供了很大的机会

    川普和习将于这周在Buenos Aires(阿根廷首都)会面,互相商讨虚弱经济全球化的最大威胁. 自从川普在今年七月第一次开始提高中国商品关税之后,对全球的投资者和逐渐削弱的经济活动来说,两位领导人可 ...

  5. mysql快速生成批量测试数据

    mysql快速生成批量测试数据 参考资料: https://blog.csdn.net/oahz4699092zhao/article/details/53332148 -- 创建一个临时内存表 ; ...

  6. RocketMQ_问题_启动控制台console报错,connect to <null> failed

    配置如图所示: 问题如图所示: 明明配置了nameserver参数为啥还是connect to null呢? 我的rocketmq部署在CentOS7虚拟机上,原来是没关闭防火墙,执行:systemc ...

  7. MySQL实战45讲学习笔记:事务隔离级别(第三讲)

    一.隔离性与隔离级别 1.事务的特性 原子性 一致性 隔离性 持久性 2.不同事务隔离级别的区别 读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到.读已提交:别人改数据的事务已经提交,我在我 ...

  8. Java使用DOM4J对XML文件进行增删改查操作

    Java进行XML文件操作,代码如下: package com.founder.mrp.util; import java.io.File; import java.util.ArrayList; i ...

  9. VMWare的host-only/bridged/NAT连接图文介绍

    1 VMware简介 VMWare虚拟机软件是一个“虚拟PC”软件,它使我们可以在一台机器上同时运行二个或更多Windows.Linux等系统. 如果我们需要使用多个系统的话,传统的方式有两种: .使 ...

  10. EffectiveC++ 第1章 让自己习惯C++

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 1 让自己习惯C++ 条款 1 :视 C++为一个语言 ...