1.插入数据

$user = new User();$user->setAge(19);$user->setEmail('hello@qq.com');$user->setPassword('aaaaaa');$em = $this->getDoctrine()->getEntityManager();$em->persist($user); //把 $user 交给 DoctrineManager管理$em->flush();


2.取出数据

$em = $this->getDoctrine()->getManager();//从数据库取出 id=1 的用户,因为与 profile 为1:1,所以会 left join profile$user = $em->getRepository('WwwWebBundle:User')->findOneBy(array('id'=>1));$book1 = new Book();$book1->setTitle("book1");$book1->setPrice(10);$book1->addUser($user);$book2 = new Book();$book2->setTitle("book2");$book2->setPrice(20);$book2->addUser($user);$em->persist($book1);$em->persist($book2);$em->flush();

有个坑:



$em = $this->getDoctrine()->getManager();//从数据库取出 id=1 的用户,因为与 profile 为1:1,所以会 left join profile/*** @var $user \Www\WebBundle\Entity\User;*/$user = $em->getRepository('WwwWebBundle:User')->findOneBy(array('id'=>1));/*** @var $user \Www\WebBundle\Entity\Book;*/foreach ($user->getBooks() as $book) {echo $book->getTitle();}

3.更新数据

$em = $this->getDoctrine()->getManager();//从数据库取出 id=1 的用户,因为与 profile 为1:1,所以会 left join profile/*** @var $user \Www\WebBundle\Entity\User;*/$user = $em->getRepository('WwwWebBundle:User')->findOneBy(array('id'=>1));$user->setAge(100);$em->persist($user);$em->flush();

4.删除数据

$em = $this->getDoctrine()->getManager();//从数据库取出 id=1 的用户,因为与 profile 为1:1,所以会 left join profile/*** @var $user \Www\WebBundle\Entity\User;*/$user = $em->getRepository('WwwWebBundle:User')->findOneBy(array('id'=>1));$em->remove($user);$em->flush();

5.ParamConverter的使用:

/*** @Route("/book/show/{id}")* @ParamConverter("book",class="WwwWebBundle:Book")*/public function showBookAction(Book $book){echo new Response($book->getTitle());}

5. 使用 Repository 的 find 方法

$em = $this->getDoctrine()->getManager();/*** @var $user \Www\WebBundle\Entity\Book;*///$book = $em->getRepository('WwwWebBundle:Book')->findByTitle($book = $em->getRepository('WwwWebBundle:Book')->findBy(array('title'=>'book1'),array('price'=>'DESC'));

6. Repository 里定义方法

复杂的逻辑放这里,然后在其他地方调用


7. 使用 Doctrine 的生命周期管理功能



$em = $this->getDoctrine()->getManager();/*** @var $user \Www\WebBundle\Entity\Book;*/$book3 = new Book();$book3->setTitle('book3')->setPrice(333);$em->persist($book3);$em->flush();$book2 = $em->getRepository('WwwWebBundle:Book')->findOneBy(array('id'=>2));$book2->setPrice(222);$em->persist($book2);$em->flush();//数据库会自动更新 createAt 和 updateAt

lifecycle event

10.Doctrine2 (2)相关推荐

  1. H3CNE最新版官网考试模拟题库

    以下工作于OSI 参考模型数据链路层的设备是__A____.(选择一项或多项) A. 广域网交换机 B. 路由器 C. 中继器 D. 集线器 A 数据链路层传输的是帧,交换机是基于帧转发的:B 路由器 ...

  2. lisp协议instand_分享|Linux 上 10 个最好的 Markdown 编辑器

    在这篇文章中,我们会点评一些可以在 Linux 上安装使用的最好的 Markdown 编辑器. 你可以在 Linux 平台上找到非常多的 的 Markdown 编辑器,但是在这里我们将尽可能地为您推荐 ...

  3. 10任务栏全屏时老是弹出_Deepin 15.10 发布,深度操作系统

    深度操作系统是一个致力于为全球用户提供美观易用.安全可靠的Linux发行版. 深度操作系统基于Linux内核,以桌面应用为主的开源GNU/Linux操作系统,支持笔记本.台式机和一体机.深度操作系统( ...

  4. Linux shell 学习笔记(10)— 处理用户输入(命令行读取参数、读取用户输入、超时处理)

    1. 命令行参数 向 shell 脚本传递数据的最基本方法是使用命令行参数.命令行参数允许在运行脚本时向命令行添加数据. $ ./addem 10 30 本例向脚本 addem 传递了两个命令行参数( ...

  5. Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建

    Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...

  6. debian 10 静态ip配置

    查看网卡 ip addr 修改配置 vim /etc/network/interfaces 模板 auto ${网卡名} iface ${网卡名} inet ${static} address ${I ...

  7. 解决 win10 pycurl安装出错 Command python setup.py egg_info failed with error code 10 编译安装包 安装万金油...

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yexiaohhjk/article/d ...

  8. 英特尔Intel® Arria® 10 FPGA加速器设计

    英特尔Intel® Arria® 10 FPGA加速器设计 Introducing the Intel® Vision Accelerator Design with Intel® Arria® 10 ...

  9. 保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事

    保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事 10 things to consider when securing an embedded 802.11 Wi-Fi device 随着 ...

  10. 交换机应用寻找10个完美的因素

    交换机应用寻找10个完美的因素 10 factors for finding the perfect switch for your application 选择开关的过程并不总是值得注意的.考虑到大 ...

最新文章

  1. centos架设lamp环境 php+mysql+httpd+vsftp
  2. LinkedIn工程经理眼中的数据世界格局
  3. java如何创建一个两个数的队列_java线程池 如何构建一个线程立即到拉到MAX数量跑业务,线程到MAX了,额外的队列可以存储任务的线程池...
  4. leader选举的源码分析-QuorumPeer.start
  5. [css]你有使用过preload、preconnect、prefetch这些属性吗?说说它们都有什么作用?
  6. MySQL与MongoDB的区别
  7. static_cast、dynamic_cast、reinterpret_cast、和const_cast
  8. Educoder 机器学习之随机森林算法 第3关:手写数字识别
  9. Unity配置JAVA环境变量
  10. Calling LoadLibraryEx on ISAPI filter failed
  11. Windows服务器安全策略配置——简单实用
  12. Tiny6410 的NandFlash(K9GAG08U0E)
  13. 学到了林海峰,武沛齐讲的Day17-5 内置函数
  14. 百度下拉框|百度下拉联想词|百度搜索框优化|百度下拉
  15. swper_swiper
  16. 京东自营客服初级考试
  17. sap 流程图 退货销售订单_销售订单_退货型
  18. 小白如何自学编程? 看完这篇这些雷和坑千万不要踩!
  19. Mac升级自带PHP版本(非Homebrew方式)
  20. odoo开发:关于打印repair模块PDF报表,默认纸张头部有一大块空白无法修改的问题解决方案

热门文章

  1. 约会安排HDU - 4553
  2. uploadify 上传文件出现HTTP 404错误
  3. HTML Agility Pack:简单好用的快速 HTML Parser
  4. apollo-配置管理中心-安装
  5. 开发自己的工作流(一)
  6. Oracle-Linux安装配置python3.6环境
  7. 6_Selenium Excel参数化
  8. 数据库优化实践【信息跟踪篇】
  9. 宁愿自己多做点,也不愿意客户多做点
  10. MySQL中 slave_compressed_protocol=ON 的压缩效果实验