当前位置:首页 > PHP

php orm 实现

2026-01-29 14:32:51PHP

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封装:

php orm 实现

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模式分离领域对象与持久化逻辑:

php orm 实现

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框架通常还提供迁移、种子数据、延迟加载等高级功能。

标签: phporm
分享给朋友:

相关文章

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…

php实现des加密

php实现des加密

DES 加密实现方法 在 PHP 中实现 DES 加密可以通过内置的 mcrypt 或 openssl 扩展完成。由于 mcrypt 已在 PHP 7.2 中废弃,推荐使用 openssl 扩展。…

php实现聊天室

php实现聊天室

PHP 实现聊天室的基本方法 使用 PHP 实现聊天室可以结合前端技术(如 HTML、JavaScript)和后端技术(如 MySQL 数据库或文件存储)。以下是几种常见的实现方式: 使用 Ajax…

php实现在线客服

php实现在线客服

PHP实现在线客服系统 在线客服系统通常需要实时通信功能,可通过PHP结合WebSocket或长轮询实现。以下是几种常见实现方式: 使用WebSocket实现实时通信 安装Ratchet库(PHP…