淘先锋技术网

首页 1 2 3 4 5 6 7
自从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项目,那么我强烈建议您使用它。