PHP 模式添加、编辑、查看和删除数据库条目

Posted

技术标签:

【中文标题】PHP 模式添加、编辑、查看和删除数据库条目【英文标题】:PHP pattern to add, edit, view and delete database entry 【发布时间】:2013-11-07 09:16:37 【问题描述】:

我想创建一个 php 类来包含某种数据(带有“标题”和“文本”的文章)。这个类应该用于不同的目的:

创建一个新条目:显示一个“标题”和“文本”为空的表单 输入字段和提交按钮以将数据添加到数据库(之后 验证)

编辑现有条目(将 ID 传递给构造函数):显示 带有“标题”和“文本”输入字段的表单,其中填充了检索到的数据 从数据库和提交按钮将数据添加到数据库(之后 验证)

查看现有条目(将 ID 传递给构造函数):显示 不可编辑的“标题”和“文本”字段(即“h1”和“p”)填充 从数据库中检索数据

删除现有条目(将 ID 传递给构造函数):显示 不可编辑的“标题”和“文本”字段(即“h1”和“p”)填充 带有从数据库中检索到的数据和一个用于删除数据的提交按钮 数据库

这应该是很常见的情况,但我还没有找到任何设计模式来执行它。 你有什么建议吗?提前致谢。

【问题讨论】:

CRUD,数据表网关,数据行网关,活动记录,有很多。 【参考方案1】:

您实际上是在寻找DataMapper。

由于所有这些 CRUD“操作”属于同一职责(它们执行抽象表访问),因此无需为每个操作实现单独的类。您将实现一个抽象单个操作的方法,该方法与您正在使用的表相关。你可以这样做,比如:

class ArticleMapper

     protected $pdo;

     protected $table = 'some_table';

     public function __construct(PDO $pdo)
     
         $this->pdo = $pdo;
     

     /**
      * @return boolean Depending on success
      */
     public function insert($id, $title, $text)
     
         $query = sprintf('INSERT INTO `table` (`id`, `title`, `text`) VALUES (:id, :title, :text)', $this->table);
         $stmt = $this->pdo->prepare($query);
         return $stmt->execute(array(
           ':title' => $title,
           ':text'  => $text,
           ':id'    => $id,
         ));
     


     public function fetchById($id)
     
        $query = sprintf('SELECT * FROM `%s` WHERE `id` =:id');
        $stmt = $this->pdo->prepare($query);
        $stmt->execute(array(
           ':id' => $id
        ));
        return $stmt->fetch();
     

     // ... The rest for deleteById() and updateById()

好处?

好吧,如果它们不是很明显,那么倾听它们是有意义的:

应用程序逻辑与其存储逻辑分离。

这意味着您的应用程序逻辑(执行某些计算)将完全不知道数据的来源。这使您易于维护和测试。这符合单一职责原则

速度很快

虽然 ORM、ActiveRecords、Query Builders 确实需要额外的内存(顺便说一下,对于每个 HTTP 请求,并且还只是看看它们的类 - 它们通常很大),但 DataMapper 不需要。您只会为您将要合作的数据库供应商编写代码。

从一个数据库供应商切换到另一个数据库供应商很容易

例如,假设您现在不确定将来是否要切换到另一个数据库供应商。使用 DataMappers 时,您所要做的就是将它的一个实例注入到需要它的类中。

class Foo

    public function __construct(MapperInterface $mapper)
    
       $this->mapper = $mapper;
    

    public function doSomeComputationsWithId($id)
    
        $data = $this->mapper->fetchById($id);
        // .. do computations here
        return $result;
    


$mapper = new Article_mysql_Mapper($pdo);

// or

$mapper = new Article_MongoDB_Mapper($mongoInstance);

$foo = new Foo($mapper);

print_r($foo->doSomeComputationsWithId($_GET['id']));

【讨论】:

【参考方案2】:

大多数 PHP MVC 包含针对此类问题的良好设计模式。查看以下框架:

Laravel:laravel.com CakePHP:cakephp.org Zend 框架:framework.zend.com

如果你想保持简单并且只为这个问题设计一个 PHP 类,你应该检查 CRUD、ORM 和 ActiveRecord。以下链接可能会派上用场:PHP ActiveRecord

【讨论】:

以上是关于PHP 模式添加、编辑、查看和删除数据库条目的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SwiftUI 的详细信息视图(编辑项目视图)中删除核心数据条目?

如何查看所有 ArrayList 条目并删除特定条目?

如何使用 php 在仅一列中添加编辑和删除按钮?

powershell 用于向hosts文件添加/删除/查看条目的Powershell脚本。

在 PHP 中按用户删除帖子/条目

编辑和删除按钮在php,ajax中的服务器端数据表中添加