h2lsoft/db-manager

PDO查询管理包装器

v1.2.2 2024-05-28 16:01 UTC

This package is auto-updated.

Last update: 2024-09-28 17:07:27 UTC


README

PDO包装器,用于简化数据库查询。它提供了一个简单的方法来创建、检索、更新和删除记录。

Version

要求

  • php >= 7.3
  • php PDO扩展

安装

直接通过Composer安装

$ composer require h2lsoft/db-manager

基本用法

use \h2lsoft\DBManager;

$DBM = new DBManager\DBManager(); // soft mode is activated by default
$DBM->connect('mysql', 'localhost', 'root', '', 'mydatabase');

// execute simple query with binding
$sql = "SELECT Name, SurfaceArea FROM Country WHERE Continent = :Continent AND deleted = 'NO' ORDER BY SurfaceArea DESC LIMIT 3";
$results = $DBM->query($sql, [':Continent' =>  'Asia'])->fetchAll();

// or use short version
$sql = $DBM->select("Name, SurfaceArea")
           ->from('Country')
           ->where("Continent = :Continent")
           ->orderBy('SurfaceArea DESC')
           ->limit(3)
           ->getSQL();
$results = $DBM->query($sql, [':Continent' =>  'Asia'])->fetchAll();

// or imbricated version
$results = $DBM->select("Name, SurfaceArea")
                      ->from('Country')
                      ->where("Continent = :Continent")
                      ->orderBy('SurfaceArea DESC')
                      ->limit(3)
                      ->executeSql([':Continent' =>  'Asia'])
                            ->fetchAll();


// insert
$values = [];
$values['Name'] = "Agatha Christies";
$values['Birthdate'] = "1890-10-15";

$ID = $DBM->table('Author')->insert($values);


// update
$values = [];
$values['Name'] = "Agatha Christies";
$affected_rows = $DBM->table('Author')->update($values, $ID); # you can put direct ID or you can use where clause

// delete
$affected_rows = $DBM->table('Author')->delete(["ID = ?", $ID]);

软模式

软模式默认启用,允许在操作如:InsertUpdateDelete等记录上自动添加时间戳和作者。软模式是可选的,但推荐使用,您可以在构造函数中禁用它或使用$DBM->SoftMode(0);

软模式允许您通过将标志字段deleted设置为yes来保持数据安全,而不实际删除记录。这在意外删除行时检索数据非常有用。

您可以使用魔术方法$DBM->table('my_table')->addSoftModeColumns(),这将自动添加软模式列

  • deleted (enum => yes, no)
  • created_at (datetime)
  • created_by (varchar)
  • updated_at (datetime)
  • updated_by (varchar)
  • deleted_at (datetime)
  • deleted_by (varchar)

分页组件

$sql = $DBM->select("*")
           ->from('Country')
           ->where("Continent = :Continent")
           ->getSQL();

$params = [':Continent' => 'Asia'];

$current_page = 1;

// return a complete array paginate
$pager = $DBM->paginate($sql, $params, $current_page, 20);
[
    [total] => 51,
    [per_page] => 20,
    [last_page] => 3,
    [current_page] => 1,
    [from] => 1,
    [to] => 20,
    [page_start] => 1,
    [page_end] => 3,
    [data] => [
                        ....
              ]         
]

有用方法

// get a record by ID, you can use multiple ID by array
$record = $DBM->table('Country')->getByID(10);

//  multiple ID
$records = $DBM->table('Country')->getByID([12, 10, 55]);

许可证

MIT。请参阅完整的许可证