当前位置:首页 > PHP

php实现orm

2026-02-27 21:40:12PHP

PHP 实现 ORM 的方法

使用 PDO 扩展

PDO(PHP Data Objects)是 PHP 的一个轻量级数据库抽象层,可以用于实现简单的 ORM 功能。以下是一个基本的 PDO ORM 实现示例:

class Database {
    private $pdo;

    public function __construct($host, $dbname, $username, $password) {
        $this->pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

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

    public function fetch($sql, $params = []) {
        return $this->query($sql, $params)->fetch(PDO::FETCH_ASSOC);
    }

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

使用 Laravel Eloquent

Laravel 的 Eloquent ORM 是 PHP 中最流行的 ORM 解决方案之一。以下是 Eloquent 的基本用法:

// 定义模型
class User extends Illuminate\Database\Eloquent\Model {
    protected $table = 'users';
}

// 使用模型
$users = User::all(); // 获取所有用户
$user = User::find(1); // 获取 ID 为 1 的用户
$newUser = User::create(['name' => 'John', 'email' => 'john@example.com']); // 创建新用户

使用 Doctrine ORM

Doctrine 是另一个功能强大的 PHP ORM 工具。以下是 Doctrine 的基本配置和使用示例:

// 配置
$config = Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration([__DIR__], true);
$conn = ['driver' => 'pdo_mysql', 'user' => 'root', 'password' => '', 'dbname' => 'test'];
$entityManager = Doctrine\ORM\EntityManager::create($conn, $config);

// 定义实体
/
 * @Entity @Table(name="users")
 */
class User {
    / @Id @Column(type="integer") @GeneratedValue */
    protected $id;

    / @Column(type="string") */
    protected $name;

    // getters and setters
}

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

实现简单的 ActiveRecord 模式

可以自己实现一个简单的 ActiveRecord 模式:

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

    public static function find($id) {
        $table = static::$table;
        $sql = "SELECT * FROM $table WHERE id = ?";
        $result = (new Database())->fetch($sql, [$id]);
        $model = new static();
        $model->attributes = $result;
        return $model;
    }

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

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

使用关系映射

实现基本的关联关系:

php实现orm

class Post extends Model {
    public function user() {
        return $this->belongsTo(User::class);
    }
}

class User extends Model {
    public function posts() {
        return $this->hasMany(Post::class);
    }
}

// 使用
$user = User::find(1);
$posts = $user->posts;

以上方法展示了从简单到复杂的 PHP ORM 实现方式,可以根据项目需求选择合适的方案。

标签: phporm
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现递归

php实现递归

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

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php 实现路由

php 实现路由

PHP 实现路由的方法 在 PHP 中实现路由功能可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 PHP 实现简单路由 通过解析 URL 并匹配对应的处理逻辑,可以实现基本的路由功能。以…