当前位置:首页 > PHP

php 实现orm

2026-02-14 07:17:04PHP

PHP 实现 ORM 的方法

ORM(Object-Relational Mapping)是一种将数据库表映射到对象的技术,简化数据库操作。PHP 可以通过多种方式实现 ORM,以下是几种常见方法:

使用现成的 ORM 框架

Laravel 的 Eloquent 是一个流行的 PHP ORM 框架,提供了简洁的语法和强大的功能。

php 实现orm

// 定义模型
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

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

// 使用模型
$user = new User();
$user->name = 'John Doe';
$user->save();

$users = User::where('active', 1)->orderBy('name')->get();

Doctrine 是另一个功能丰富的 ORM,支持复杂的数据库操作和 DQL(Doctrine Query Language)。

// 定义实体
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;
}

// 使用实体
$user = new User();
$user->setName('John Doe');
$entityManager->persist($user);
$entityManager->flush();

手动实现简单的 ORM

对于小型项目,可以手动实现基本的 ORM 功能。以下是一个简化版的 ORM 实现示例:

php 实现orm

class BaseModel {
    protected static $table;
    protected $attributes = [];

    public function __construct(array $attributes = []) {
        $this->attributes = $attributes;
    }

    public function __get($name) {
        return $this->attributes[$name] ?? null;
    }

    public function __set($name, $value) {
        $this->attributes[$name] = $value;
    }

    public static function find($id) {
        $table = static::$table;
        $sql = "SELECT * FROM {$table} WHERE id = ?";
        $result = DB::query($sql, [$id]);
        return new static($result[0] ?? []);
    }

    public function save() {
        $table = static::$table;
        if (isset($this->attributes['id'])) {
            // Update
        } else {
            // Insert
        }
    }
}

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

// 使用示例
$user = User::find(1);
echo $user->name;
$user->name = 'New Name';
$user->save();

使用 PDO 扩展实现数据映射

PDO 是 PHP 的数据库抽象层,可以结合 ORM 模式使用:

class Database {
    private $pdo;

    public function __construct($config) {
        $this->pdo = new PDO(
            "mysql:host={$config['host']};dbname={$config['dbname']}",
            $config['user'],
            $config['pass']
        );
    }

    public function query($sql, $params = []) {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

class UserMapper {
    private $db;

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

    public function findById($id) {
        $result = $this->db->query("SELECT * FROM users WHERE id = ?", [$id]);
        return $result[0] ?? null;
    }

    public function save(array $user) {
        if (isset($user['id'])) {
            // Update
        } else {
            // Insert
        }
    }
}

实现 ActiveRecord 模式

ActiveRecord 是一种常见的 ORM 模式,将数据库记录映射为对象:

abstract class ActiveRecord {
    protected static $table;
    protected $attributes = [];

    public static function find($id) {
        $table = static::$table;
        $sql = "SELECT * FROM {$table} WHERE id = ?";
        $result = DB::query($sql, [$id]);
        return new static($result[0] ?? []);
    }

    public function save() {
        $table = static::$table;
        $columns = implode(', ', array_keys($this->attributes));
        $placeholders = implode(', ', array_fill(0, count($this->attributes), '?'));
        $values = array_values($this->attributes);

        $sql = "INSERT INTO {$table} ({$columns}) VALUES ({$placeholders})";
        DB::query($sql, $values);
    }
}

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

选择 ORM 方案的建议

  • 对于大型项目,推荐使用成熟的 ORM 框架如 Eloquent 或 Doctrine
  • 中小型项目可以考虑轻量级 ORM 如 RedBeanPHP
  • 需要极致性能或特殊需求的场景可以自定义简单 ORM
  • 考虑框架集成性,如 Laravel 项目首选 Eloquent

每种方法都有其优缺点,应根据项目规模、团队熟悉度和性能需求选择合适的 ORM 实现方式。

标签: phporm
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('loca…

php实现图片上传

php实现图片上传

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

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HT…

php 实现登录

php 实现登录

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

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…