当前位置:首页 > PHP

php orm 实现

2026-02-14 12:36:35PHP

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功能。

php 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();
    }
}

高级特性实现

关联关系
实现一对一、一对多等关联。

php orm 实现

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框架可以快速获得完善功能,自定义实现则更适合特定需求或学习目的。根据项目规模和要求选择合适的方案。

标签: phporm
分享给朋友:

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数:…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUT…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…