php 实现 model层
在 PHP 中实现 Model 层通常遵循 MVC(Model-View-Controller)架构模式,Model 层负责处理数据逻辑、数据库交互等核心业务。以下是几种常见实现方式:
基础实现(原生 PHP)
使用原生 PHP 实现 Model 层可以通过封装数据库操作完成:
class UserModel {
private $db;
public function __construct($db) {
$this->db = $db;
}
public function getUsers() {
$query = "SELECT * FROM users";
$stmt = $this->db->prepare($query);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
public function createUser($data) {
$query = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':name', $data['name']);
$stmt->bindParam(':email', $data['email']);
return $stmt->execute();
}
}
使用 ORM 框架(Eloquent)
Laravel 的 Eloquent ORM 提供了简洁的 Model 层实现:

use Illuminate\Database\Eloquent\Model;
class User extends Model {
protected $table = 'users';
protected $fillable = ['name', 'email'];
}
// 使用示例
$user = new User();
$user->name = 'John';
$user->email = 'john@example.com';
$user->save();
抽象基类封装
创建基础 Model 类减少重复代码:
abstract class BaseModel {
protected $table;
protected $db;
public function __construct($db) {
$this->db = $db;
}
public function find($id) {
$query = "SELECT * FROM {$this->table} WHERE id = :id";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':id', $id);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
class ProductModel extends BaseModel {
protected $table = 'products';
}
实现 ActiveRecord 模式
结合数据库操作的 Model 实现:

class ActiveRecordModel {
private static $db;
protected static $table;
public static function setDb($db) {
self::$db = $db;
}
public static function all() {
$query = "SELECT * FROM " . static::$table;
$stmt = self::$db->prepare($query);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
class Post extends ActiveRecordModel {
protected static $table = 'posts';
}
数据映射模式
分离数据库操作与业务逻辑:
class UserDataMapper {
private $db;
public function __construct($db) {
$this->db = $db;
}
public function mapToObject(array $data) {
$user = new User();
$user->setId($data['id']);
$user->setName($data['name']);
return $user;
}
public function fetchById($id) {
$query = "SELECT * FROM users WHERE id = :id";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':id', $id);
$stmt->execute();
return $this->mapToObject($stmt->fetch(PDO::FETCH_ASSOC));
}
}
选择实现方式时应考虑项目规模:
- 小型项目适合原生实现或简单 ORM
- 中型项目建议使用框架提供的 ORM
- 大型复杂系统可考虑数据映射或领域驱动设计
所有示例均需要提前建立数据库连接并注入到 Model 中。现代 PHP 框架通常已内置更完善的 Model 层解决方案。





