php 实现orm
PHP 实现 ORM 的方法
使用现有 ORM 框架
PHP 社区提供了多个成熟的 ORM 框架,例如 Doctrine 和 Eloquent(Laravel 内置)。这些框架提供了完整的 ORM 功能,包括数据库连接、实体映射、查询构建等。
- Doctrine:支持多种数据库,提供 DQL(Doctrine Query Language)和强大的缓存机制。
- Eloquent:语法简洁,与 Laravel 深度集成,支持模型关联和查询作用域。
安装 Doctrine 示例:
composer require doctrine/orm
自定义 ORM 实现
如果项目需要轻量级解决方案,可以手动实现基础 ORM 功能。以下是一个简单的实现思路:
定义基类 Model,处理数据库连接和 CRUD 操作:
class Model {
protected static $pdo;
protected $table;
protected $attributes = [];
public static function setConnection(PDO $pdo) {
self::$pdo = $pdo;
}
public function save() {
if (isset($this->attributes['id'])) {
$this->update();
} else {
$this->insert();
}
}
protected function insert() {
$columns = implode(', ', array_keys($this->attributes));
$placeholders = implode(', ', array_fill(0, count($this->attributes), '?'));
$sql = "INSERT INTO {$this->table} ($columns) VALUES ($placeholders)";
$stmt = self::$pdo->prepare($sql);
$stmt->execute(array_values($this->attributes));
$this->attributes['id'] = self::$pdo->lastInsertId();
}
}
使用 PDO 扩展
PHP 的 PDO(PHP Data Objects)扩展是数据库交互的基础工具,可以结合 ORM 使用:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
Model::setConnection($pdo);
class User extends Model {
protected $table = 'users';
}
$user = new User();
$user->attributes = ['name' => 'John', 'email' => 'john@example.com'];
$user->save();
实现查询构建器
为自定义 ORM 添加查询构建功能,支持链式调用:

class QueryBuilder {
private $pdo;
private $query = '';
private $params = [];
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
public function select($columns = '*') {
$this->query = "SELECT $columns ";
return $this;
}
public function where($column, $operator, $value) {
$this->query .= "WHERE $column $operator ? ";
$this->params[] = $value;
return $this;
}
public function get() {
$stmt = $this->pdo->prepare($this->query);
$stmt->execute($this->params);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
性能优化建议
- 使用预处理语句防止 SQL 注入
- 实现简单的缓存机制减少数据库查询
- 延迟加载关联数据避免 N+1 查询问题
- 批量操作时使用事务提升效率






