自从PHP语言在Web开发上的应用逐渐增多,PHP框架也越来越多。其中,Doctrine ORM是PHP领域中经典的ORM框架之一。它的目标是为PHP应用程序提供高性能、独立于数据库类型、宽松的对象关系映射(ORM)实现。
Doctrine ORM提供了面向对象的数据访问层,可以跨平台,适用于任何PHP 5.5+的项目。使用Hibernate的思想,Doctrine ORM能够使用各种数据库系统,并在多个项目中共享数据访问逻辑和数据库结构定义。
为了更好地说明Doctrine ORM的用法和作用,下面举例说明。如果我们要保存一个新的用户信息至数据库,需要如下代码:
$user = new User; $user->setName('小明'); $user->setAge(18); $em = $this->getDoctrine()->getManager(); $em->persist($user); $em->flush();上面的例子中,我们使用Doctrine Object Manager,将之前定义过的User对象保存至数据库。 Doctrine ORM支持所有的标准数据库操作命令例如SELECT、UPDATE、DELETE和INSERT。通过使用Doctrine Query Language(DQL)运行查询语句,可以轻松检索数据库信息。
$repository = $this->getDoctrine()->getRepository(User::class); $query = $repository->createQueryBuilder('u') ->where('u.age >:age') ->setParameter('age', 18) ->getQuery(); $users = $query->getResult();上面的例子中,我们从数据库中获取所有年龄超过18岁的用户信息。 Doctrine ORM不仅支持实体之间的一对多以及多对一关系,还支持多对多以及一对一关系。下面是一个简单的多对多关系示例:
class User { // ... /** * Many Users have Many Groups. * @ORM\ManyToMany(targetEntity="Group", inversedBy="users") * @ORM\JoinTable(name="users_groups") */ private $groups; } class Group { // ... /** * Many Groups have Many Users. * @ORM\ManyToMany(targetEntity="User", mappedBy="groups") */ private $users; }上面的例子中,我们定义了两个实体类,User和Group,两者之间是多对多的关系。用户可以属于多个群组,群组也可以拥有多个用户。 接下来是Doctrine Queries示例,通过它我们可以轻松查询、更新和删除数据库的信息:
$query = $em->createQuery('SELECT u FROM AppBundle:User u WHERE u.age >:age'); $query->setParameter('age', 18); $users = $query->getResult(); $qb->update('MyProject\Model\User', 'u') ->set('u.firstname', $qb->expr()->literal('Robert')) ->where('u.id = ?1') ->setParameter(1, 42) ->getQuery() ->execute(); $qb->delete('MyProject\Model\Phonenumber', 'p') ->where('p.phonenumber = ?1') ->setParameter(1, '1234') ->getQuery() ->execute();上面的代码展示了查询、更新和删除的过程。 综上所述,Doctrine ORM是一个非常强大的PHP ORM框架,可用于任何PHP项目。它是最流行的Doctrine项目之一,是PHP领域中最好的ORM框架之一,如果您正在开发PHP项目,那么我强烈建议您使用它。