当前位置:首页 > PHP

php实现orm

2026-01-29 00:36:52PHP

PHP 实现 ORM 的方法

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

使用现有 ORM 框架

成熟的 ORM 框架提供完整功能,如 Doctrine 或 Eloquent(Laravel 内置)。以下是 Doctrine 的简单示例:

// 定义实体类
use Doctrine\ORM\Mapping as ORM;

/
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User {
    /
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /
     * @ORM\Column(type="string")
     */
    private $name;
}

// 使用
$entityManager->persist($user);
$entityManager->flush();

手动实现简单 ORM

对于轻量需求,可以手动封装数据库操作:

class BaseModel {
    protected $table;
    protected $db;

    public function __construct($db) {
        $this->db = $db;
    }

    public function find($id) {
        $stmt = $this->db->prepare("SELECT * FROM {$this->table} WHERE id = ?");
        $stmt->execute([$id]);
        return $stmt->fetch(PDO::FETCH_OBJ);
    }
}

class User extends BaseModel {
    protected $table = 'users';
}

使用 PDO 扩展

PDO 提供数据库抽象层,适合基础 ORM 功能:

class User {
    public static function getById($id) {
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
        $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
        $stmt->execute([$id]);
        return $stmt->fetchObject(__CLASS__);
    }
}

实现 Active Record 模式

Active Record 模式将数据和行为结合:

class User {
    public $id;
    public $name;

    public function save() {
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
        if ($this->id) {
            $stmt = $pdo->prepare("UPDATE users SET name = ? WHERE id = ?");
            $stmt->execute([$this->name, $this->id]);
        } else {
            $stmt = $pdo->prepare("INSERT INTO users (name) VALUES (?)");
            $stmt->execute([$this->name]);
            $this->id = $pdo->lastInsertId();
        }
    }
}

使用 Data Mapper 模式

Data Mapper 分离数据与业务逻辑:

php实现orm

class UserMapper {
    private $pdo;

    public function __construct(PDO $pdo) {
        $this->pdo = $pdo;
    }

    public function save(User $user) {
        if ($user->getId()) {
            $stmt = $this->pdo->prepare("UPDATE users SET name = ? WHERE id = ?");
            $stmt->execute([$user->getName(), $user->getId()]);
        } else {
            $stmt = $this->pdo->prepare("INSERT INTO users (name) VALUES (?)");
            $stmt->execute([$user->getName()]);
            $user->setId($this->pdo->lastInsertId());
        }
    }
}

选择方案时应考虑项目规模、性能需求和团队熟悉度。成熟框架适合复杂项目,手动实现适合简单需求或学习目的。

标签: phporm
分享给朋友:

相关文章

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php数组实现

php数组实现

PHP 数组的基本实现 PHP 数组是一种非常灵活的数据结构,可以存储多个值,并且支持多种类型的键(整数或字符串)。PHP 数组实际上是有序映射(ordered map),可以看作是列表(vector…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…