当前位置:首页 > 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封装:

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

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

实现查询构造器

构建流畅的查询接口:

php orm 实现

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

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php怎么实现登录功能

php怎么实现登录功能

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

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…