当前位置:首页 > PHP

php 实现orm

2026-02-28 06:21:24PHP

PHP 实现 ORM 的方法

ORM(Object-Relational Mapping)是将数据库表映射为对象的技术,简化数据库操作。以下是几种 PHP 实现 ORM 的方式:

使用现有 ORM 框架

  1. Eloquent(Laravel 内置 ORM)
    Eloquent 是 Laravel 默认的 ORM,提供简洁的语法操作数据库。

    // 定义模型
    namespace App\Models;
    use Illuminate\Database\Eloquent\Model;
    class User extends Model {
        protected $table = 'users';
    }
    
    // 查询数据
    $users = User::where('active', 1)->get();
  2. Doctrine
    Doctrine 是一个功能强大的 ORM,支持 DQL(Doctrine Query Language)和复杂的关联关系。

    // 定义实体
    namespace App\Entity;
    use Doctrine\ORM\Mapping as ORM;
    #[ORM\Entity]
    #[ORM\Table(name: 'users')]
    class User {
        #[ORM\Id]
        #[ORM\GeneratedValue]
        #[ORM\Column(type: 'integer')]
        private $id;
    }
    
    // 查询数据
    $users = $entityManager->getRepository(User::class)->findBy(['active' => 1]);
  3. Propel
    Propel 是另一个流行的 ORM,支持代码生成和 ActiveRecord 模式。

    // 查询数据
    $users = UserQuery::create()->filterByActive(1)->find();

自定义简易 ORM

  1. 基础 ActiveRecord 实现
    通过继承基类实现简单的 ORM 功能。

    class Model {
        protected static $table;
        protected $attributes = [];
    
        public static function find($id) {
            $table = static::$table;
            $query = "SELECT * FROM {$table} WHERE id = ?";
            $result = DB::query($query, [$id]);
            return new static($result);
        }
    }
    
    class User extends Model {
        protected static $table = 'users';
    }
    
    $user = User::find(1);
  2. 使用 PDO 封装
    结合 PDO 实现简单的数据映射。

    class ORM {
        private $pdo;
        private $table;
    
        public function __construct($table) {
            $this->pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
            $this->table = $table;
        }
    
        public function where($conditions) {
            $where = implode(' AND ', array_map(fn($k) => "$k = ?", array_keys($conditions)));
            $stmt = $this->pdo->prepare("SELECT * FROM {$this->table} WHERE {$where}");
            $stmt->execute(array_values($conditions));
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        }
    }
    
    $userORM = new ORM('users');
    $users = $userORM->where(['active' => 1]);

性能优化建议

  1. 延迟加载
    关联数据仅在需要时加载,减少不必要的查询。

  2. 缓存查询结果
    对频繁访问的数据使用缓存(如 Redis)。

  3. 批量操作
    使用批量插入或更新减少数据库交互次数。

    php 实现orm

    User::insert([['name' => 'A'], ['name' => 'B']]);

以上方法可根据项目需求选择,现有框架适合快速开发,自定义 ORM 更适合特定场景优化。

标签: phporm
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php实现异步图片上传

php实现异步图片上传

异步图片上传的实现方法 在PHP中实现异步图片上传通常需要结合前端JavaScript和后端PHP代码。以下是几种常见的方法: 使用XMLHttpRequest或Fetch API 前端使用Java…

php 实现扫码登录

php 实现扫码登录

PHP 实现扫码登录的流程 扫码登录的核心流程分为两部分:前端生成二维码并轮询状态,后端验证扫码状态并返回登录凭证。以下是具体实现方法: 生成唯一二维码 创建临时令牌 在用户访问登录页面时,后端生…