php实现orm
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';
}
使用关系映射
实现基本的关联关系:
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 实现方式,可以根据项目需求选择合适的方案。







