php 实现orm
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 模式,将数据库记录映射为对象:
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 实现方式。






