• 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 ScourgenWebBundleEntityUserRepository
         */
       protected function getUserRepository(){
           return $this->getDoctrine()->getManager()->getRepository('ScourgenWebBundle:User');
       }
    
       //获取book的
        /**
         * @return ScourgenWebBundleEntityBookRepository
        */
        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 ScourgenWebBundleEntityBook*/ 使用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();  //如果产生异常就返回
    }

     

     

    一般有一些更新操作我们会经常执行,比如创建时间,更新时间字段的记录,这里我们可以使用ORMPrePersist和ORMPreUpdate实现

    前者是创建新的对象刷新数据库之前进行操作,而后者是在更新某个对象之前进行操作,比如我们可以在创建对象之后,更新数据之前,
    对创建书写函数进行设置,又比如我们在更新操作执行之前,对更新时间书写函数进行自动设置,下面是例子

    /**
         * 在创建之前先进行的操作,记录时间
         * @ORMPrePersist()
         */
        public function PrePersist(){
            if($this->getCreateTime() == null) {   //第一次创建则更新
                $this->setCreateTime(new Datetime('now'));
            }
            $this->setUpdateTime(new Datetime('now'));   //记录更新时间
        }
        /**
         * 在更新之前进行的操作,更新时间
         * 如果有很多表都有这个操作,可以创建一个基类,有这些方法,继承即可
         * @ORMPreUpdate()
         */
        public function PreUpdate(){
            $this->setUpdateTime(new DateTime('now'));
        }

     

  • 相关阅读:
    c# 清楚表格美容
    linux下svn迁移目录操作
    XML 操作(判断用户登录)
    confirm弹出一个包含"确定"与"取消"的对话方块.
    Js获取当前日期时间及其它操作
    简单实用方法!!
    随机数概率解决思路
    简单的SQL语句!!
    JS验证表单大全
    C语言系列(三):最近重拾C语言的想法,谈到C中易错点,难点;以及开源代码中C语言的一些常用技巧,以及如何利用define、typedef、const等写健壮的C程序
  • 原文地址:https://www.cnblogs.com/eenio/p/10497754.html
Copyright © 2020-2023  润新知