当前位置:首页 > PHP

php 实现orm

2026-02-14 07:17:04PHP

PHP 实现 ORM 的方法

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

使用现成的 ORM 框架

Laravel 的 Eloquent 是一个流行的 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 实现示例:

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 模式,将数据库记录映射为对象:

php 实现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中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php 路由实现

php 路由实现

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

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

php实现文章

php实现文章

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

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…

php搜索功能的实现

php搜索功能的实现

实现PHP搜索功能的方法 数据库搜索 使用SQL的LIKE语句进行模糊匹配,适用于简单的搜索需求。 $searchTerm = $_GET['search']; $query = "SELECT *…