当前位置:首页 > 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中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php 实现登录

php 实现登录

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

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…