php orm 实现
PHP ORM 实现方法
ORM(Object-Relational Mapping)是一种将数据库表映射到对象的技术,简化数据库操作。以下是几种常见的PHP ORM实现方式:
使用现成的ORM框架
Laravel Eloquent
Eloquent是Laravel框架内置的ORM,支持链式查询、模型关联等特性。
// 定义模型
class User extends \Illuminate\Database\Eloquent\Model {}
// 查询
$users = User::where('active', 1)->orderBy('name')->get();
Doctrine
Doctrine是独立的PHP ORM,支持复杂查询和数据库抽象层。
// 定义实体
/ @Entity */
class User {
/ @Id @GeneratedValue @Column(type="integer") */
private $id;
/ @Column(type="string") */
private $name;
}
// 查询
$users = $entityManager->getRepository(User::class)->findAll();
自定义简单ORM实现
基础映射
通过封装PDO实现简单的ORM功能。

class Model {
protected static $table;
protected $attributes = [];
public static function find($id) {
$table = static::$table;
$stmt = DB::prepare("SELECT * FROM {$table} WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetchObject(static::class);
}
}
class User extends Model {
protected static $table = 'users';
}
查询构建器
实现链式查询方法。
class QueryBuilder {
private $table;
private $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)->fetchAll();
}
}
高级特性实现
关联关系
实现一对一、一对多等关联。

class User extends Model {
public function posts() {
return $this->hasMany(Post::class, 'user_id');
}
}
class Post extends Model {
public function user() {
return $this->belongsTo(User::class, 'user_id');
}
}
事件钩子
添加模型生命周期事件。
class Model {
protected static function boot() {
static::saving(function($model) {
$model->beforeSave();
});
}
protected function beforeSave() {
// 保存前逻辑
}
}
性能优化
延迟加载
实现关联数据的按需加载。
class Relation {
private $loaded = false;
private $results;
public function get() {
if (!$this->loaded) {
$this->results = $this->query();
$this->loaded = true;
}
return $this->results;
}
}
缓存查询
缓存常用查询结果。
class CachedModel extends Model {
public static function find($id) {
$key = "model_{$id}";
if ($cached = Cache::get($key)) {
return $cached;
}
$model = parent::find($id);
Cache::set($key, $model);
return $model;
}
}
选择现成ORM框架可以快速获得完善功能,自定义实现则更适合特定需求或学习目的。根据项目规模和要求选择合适的方案。






