安装
在 composer.json 中的require 加入:
"doctrine/doctrine-orm-module": "0.*"
执行: php composer.phar update
配置
-
创建 config/autoload/doctrine.local.php
return array( 'doctrine' => array( 'connection' => array( 'orm_default' => array( 'driverClass' =>'Doctrine\DBAL\Driver\PDOMySql\Driver', 'params' => array( 'host' => '127.0.0.1', 'port' => '3306', 'user' => 'root', 'password' => '123123', 'dbname' => 'test', ) ) ) ) );
-
要模块目录的config/module.config.php 加入
'doctrine' => array( 'driver' => array( __NAMESPACE__ . '_driver' => array( 'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 'cache' => 'array', 'paths' => array(__DIR__ . '/../src/'.__NAMESPACE__.'/Entity') ), 'orm_default' => array( 'drivers' => array( __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver' ) ), ), ), 这个文件加设命名空间, 例如 namespace Application; Entity的目录位于 src目录的命名空间目录下。
Entity的编写
-
doctrine 命令 验证数据表 ./vendor/bin/doctrine-module orm:validate-schema 创建数据表 ./vendor/bin/doctrine-module orm:schema-tool:create 更新数据表结构 ./vendor/bin/doctrine-module orm:schema-tool:update —force —dump-sql 生成getter/setter ./vendor/bin/doctrine-module orm:generate:entities ./module/Application/src
-
注释详解
http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html
-
User Entity
use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(type="bigint", name="user_id", options={"comment": "用户ID"}) */ protected $id; /** * @ORM\Column(type="string", name="username", nullable=false, length=30, options={"comment": "用户名"}) */ protected $name; /** * @ORM\Column(type="integer", name="create_time", nullable=false, options={"comment": "创建时间"}) */ protected $created; /** * @ORM\OneToMany(targetEntity="Bill", mappedBy="user") */ protected $bills; public function __construct() { $this->bills = new ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * @return User */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Set created * * @param integer $created * @return User */ public function setCreated($created) { $this->created = $created; return $this; } /** * Get created * * @return integer */ public function getCreated() { return $this->created; } /** * Add bills * * @param \Application\Entity\Bill $bills * @return User */ public function addBill(\Application\Entity\Bill $bills) { $this->bills[] = $bills; return $this; } /** * Remove bills * * @param \Application\Entity\Bill $bills */ public function removeBill(\Application\Entity\Bill $bills) { $this->bills->removeElement($bills); } /** * Get bills * * @return \Doctrine\Common\Collections\Collection */ public function getBills() { return $this->bills; } } ```
-
Bill Entity
```php namespace Application\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="bills") */ class Bill { /** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(type="bigint", name="bill_id", options={"comment": "订单ID"}) */ protected $id; /** * @ORM\Column(type="decimal", precision=2, scale=1, options={"comment": "订单价钱"}) */ protected $price; /** * @ORM\ManyToOne(targetEntity="User", inversedBy="bills") * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") */ protected $user; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set price * * @param string $price * @return Bill */ public function setPrice($price) { $this->price = $price; return $this; } /** * Get price * * @return string */ public function getPrice() { return $this->price; } /** * Set user * * @param \Application\Entity\User $user * @return Bill */ public function setUser(\Application\Entity\User $user = null) { $this->user = $user; return $this; } /** * Get user * * @return \Application\Entity\User */ public function getUser() { return $this->user; } } ```
-
Controller
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager'); //增加记录 //增加单一记录 /* $user = new User(); $user->setName('nate'); $user->setCreated(time()); $objectManager->persist($user); $objectManager->flush(); */ //增加关联记录 /* $user = new User(); $user->setName('may'); $user->setCreated(time()); $bill = new Bill(); $bill->setPrice(8.8); $bill->setUser($user); $objectManager->persist($user); $objectManager->persist($bill); $objectManager->flush(); */ /* //查找相关 //查找不到 $user = $objectManager->getRepository('Application\Entity\User')->find(100); if (! is_null($user)) { echo "user exists"; } else { echo "user not exists"; } */ //查找有记录 /* $user = $objectManager->getRepository('Application\Entity\User')->find(2); if (! is_null($user)) { echo $user->getId(), $user->getName(), $user->getCreated(); } else { echo "user not exists"; } */ /* //一对多关系查询 $bill = $objectManager->getRepository('Application\Entity\Bill')->find(2); if (! is_null($bill)) { echo $bill->getUser()->getName(); } exit; */ //一对多关系查询 /* $user = $objectManager->getRepository('Application\Entity\User')->find(7); if (! is_null($user)) { $bills = $user->getBills(); if (is_object($bills) && count($bills) > 0) { foreach ($bills as $bill) { echo $bill->getId(), ' # ', $bill->getPrice(), '<br/>'; } } } else { echo "user not exists"; } */ /* //设置条件查询单条记录 $user = $objectManager->getRepository('Application\Entity\User')->findOneBy(array( 'name' => 'nate_2' )); if (! is_null($user)) { echo $user->getId(), $user->getName(), $user->getCreated(); } else { echo "user not exists"; } //设置条件准确查询多条记录 $users = $objectManager->getRepository('Application\Entity\User')->findBy(array( 'name' => 'nate' )); if (! is_null($users)) { foreach ($users as $user) { echo $user->getId(), $user->getName(), $user->getCreated(); } } else { echo "user not exists"; } //设置条件模糊查询多条记录 $users = $objectManager->getRepository('Application\Entity\User')->createQueryBuilder('u') ->where('u.name like :name') ->setParameter('name', 'nate%') ->getQuery() ->getResult(); if (! is_null($users) && is_array($users)) { foreach ($users as $user) { echo $user->getId(), $user->getName(), $user->getCreated(); } } else { echo "user not exists"; } //按ID号降序设置条件模糊查询多条记录 $users = $objectManager->getRepository('Application\Entity\User')->createQueryBuilder('u') ->where('u.name like :name') ->setParameter('name', 'nate%') ->orderBy('u.id', 'desc') ->getQuery() ->getResult(); if (! is_null($users) && is_array($users)) { foreach ($users as $user) { echo $user->getId(), $user->getName(), $user->getCreated(); } } else { echo "user not exists"; } */ //删除记录 /* $user = $objectManager->getRepository('Application\Entity\User')->find(3); if (! is_null($user)) { $objectManager->remove($user); $objectManager->flush(); var_dump($user); } */ //更新记录 /* $user = $objectManager->getRepository('Application\Entity\User')->find(4); if (! is_null($user)) { $user->setName('may'); $objectManager->flush(); echo $user->getId(), $user->getName(); } */ ```
-
query-builder相关文档
http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html