使用 orm 简化 php 数据库连接,将关系数据库中的表和数据映射到应用程序中的对象,可极大简化与数据库的交互。orm 的好处包括简化的 crud 操作、自动映射、对象关系和提高可维护性。实战案例:使用 doctrine 框架在 php 中创建和持久化实体,通过将其添加到持久性上下文中并提交更改来与数据库进行交互。
使用 ORM 简化 PHP 数据库连接
对象关系映射 (ORM) 是一种模式,它将关系数据库中的表和数据映射到应用程序中的对象。使用 ORM 可以极大地简化与数据库的交互,从而提高开发效率和代码可维护性。
什么是 ORM?
ORM 充当对象和关系数据库之间的一层抽象。它自动将对象属性映射到数据库表中的列,并提供用于创建、读取、更新和删除 (CRUD) 操作的便捷方法。
好处
使用 ORM 的主要好处包括:
- 简化的 CRUD 操作:ORM 提供简单的API,可以轻松地从数据库中创建、读取、更新和删除数据。
- 自动映射:ORM 自动将对象属性映射到数据库中的列,无需编写繁琐的 SQL 查询。
- 对象关系:ORM 可以自动管理对象之间的关系,例如一对多或多对多的关系。
- 提高可维护性:通过使用 ORM,可以将数据库交互逻辑从业务逻辑中分离出来,提高代码的可维护性和可读性。
实战案例
使用 PHP 中流行的 ORM 框架 Doctrine 来提供一个实战案例。
安装 Doctrine
<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/15906.html" target="_blank">composer</a> require doctrine/orm
配置文件
config/orm.yml 中的配置文件如下:
doctrine:
dbal:
url: '<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/15713.html" target="_blank">mysql</a>://root:@localhost:3306/doctrine_db'
driver: pdo_mysql
orm:
auto_generate_proxy_classes: true
metadata_cache_driver: array
query_cache_driver: array
实体定义
创建用于映射到数据库表的实体:
// src/Entity/Product.php
namespace AppEntity;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity
*/
class Product
{
/**
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMColumn(type="string", length=255)
*/
private $name;
/**
* @ORMColumn(type="float")
*/
private $price;
// 省略其他代码...
}
使用 ORM
在控制器中使用Doctrine创建一个新产品:
// src/Controller/ProductController.php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use AppEntityProduct;
use DoctrineORMEntityManagerInterface;
class ProductController extends AbstractController
{
public function create(Request $request, EntityManagerInterface $entityManager)
{
$product = new Product();
$product->setName('New Product');
$product->setPrice(10.99);
$entityManager->persist($product);
$entityManager->flush();
return $this->redirectToRoute('product_index');
}
}
在上面的示例中,persist() 方法将新产品添加到与持久性上下文关联的管理对象列表中。flush() 方法将持久性上下文的所有更改提交到数据库。