php orm 实现
PHP ORM 实现方法
使用现有ORM框架
PHP生态中有多个成熟的ORM框架,如Doctrine、Eloquent(Laravel内置)、Propel等。以Eloquent为例:
// 定义模型
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
protected $table = 'users';
}
// 查询
$user = User::find(1);
$users = User::where('active', 1)->orderBy('name')->get();
// 创建
$user = new User;
$user->name = 'John';
$user->save();
实现基础ORM功能
如需自定义ORM,可基于PDO封装:
class BaseModel {
protected static $table;
protected $attributes = [];
public static function find($id) {
$table = static::$table;
$sql = "SELECT * FROM {$table} WHERE id = ?";
$stmt = DB::prepare($sql);
$stmt->execute([$id]);
return $stmt->fetchObject(static::class);
}
public function save() {
$table = static::$table;
$fields = implode(',', array_keys($this->attributes));
$values = array_values($this->attributes);
$placeholders = rtrim(str_repeat('?,', count($values)), ',');
$sql = "INSERT INTO {$table} ({$fields}) VALUES ({$placeholders})";
$stmt = DB::prepare($sql);
$stmt->execute($values);
}
}
// 使用
class User extends BaseModel {
protected static $table = 'users';
}
实现Active Record模式
Active Record模式将数据访问逻辑与业务逻辑结合:
trait ActiveRecord {
public function __get($property) {
return $this->attributes[$property] ?? null;
}
public function __set($property, $value) {
$this->attributes[$property] = $value;
}
}
class Product {
use ActiveRecord;
protected static $table = 'products';
}
实现Data Mapper模式
Data Mapper模式分离领域对象与持久化逻辑:
class UserMapper {
public function fetchById($id) {
$data = $this->adapter->query("SELECT * FROM users WHERE id = $id");
return $this->mapToEntity($data);
}
private function mapToEntity($data) {
$user = new User();
$user->setId($data['id']);
$user->setName($data['name']);
return $user;
}
}
处理关联关系
实现一对一、一对多等关联:
class Post extends BaseModel {
public function comments() {
return Comment::where('post_id', $this->id)->get();
}
}
class Comment extends BaseModel {
public function post() {
return Post::find($this->post_id);
}
}
实现查询构造器
构建流畅的查询接口:

class QueryBuilder {
protected $conditions = [];
public function where($column, $value) {
$this->conditions[] = "{$column} = '{$value}'";
return $this;
}
public function get() {
$where = $this->conditions ? 'WHERE ' . implode(' AND ', $this->conditions) : '';
$sql = "SELECT * FROM {$this->table} {$where}";
return DB::query($sql);
}
}
关键点包括:数据库连接管理、对象关系映射、查询构造、事务处理、缓存集成等。成熟的ORM框架通常还提供迁移、种子数据、延迟加载等高级功能。






