当前位置:首页 > PHP

php 实现orm

2026-04-03 15:27:32PHP

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 添加查询构建功能,支持链式调用:

php 实现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 查询问题
  • 批量操作时使用事务提升效率

标签: phporm
分享给朋友:

相关文章

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…