hnrazevedo/datamanager

datamanager 是数据库中的一个简单持久化抽象组件。

v2.1.4 2021-02-19 01:46 UTC

README

Maintainer Latest Version Scrutinizer Code Quality Build Status Software License PHP from Packagist Total Downloads

datamanager 是数据库中的一个简单持久化抽象组件。它的作者不是开发领域的专业人士,而是一位来自技术领域的人士,正在提高自己的知识。

Datamanager 是数据库中的一个简单持久化抽象组件。它的作者不是开发领域的专业人士,而是一位来自技术领域的人士,正在提高自己的知识。

亮点

  • 易于设置(Fácil de configurar)
  • 总 CRUD 抽象(Asbtração total do CRUD)
  • 创建安全模型(Crie de modelos seguros)
  • Composer 就绪(Pronto para o composer)

安装

datamanager 可通过 Composer 获取

"hnrazevedo/datamanager": "^2.1"

或者运行

composer require hnrazevedo/Datamanager

文档

有关如何使用 datamanager 的详细信息,请参阅组件目录中的示例文件夹

有关如何使用 datamanager 的详细信息,请参阅组件目录中的示例文件夹

错误

发生错误时,datamanager 将抛出 DatamanagerException,因此需要将其导入到您的类中

发生错误时,datamanager 将抛出 DatamanagerException,因此需要将其导入到您的类中。

use HnrAzevedo\Datamanager\DatamanagerException;

连接

要开始使用 datamanager,您需要连接到数据库(MariaDB / MySql)。有关更多信息,请参阅 PHP.net 上的 PDO 连接手册

要开始使用 datamanager,您需要连接到数据库。有关更多信息,请参阅 PHP.net 上的 PDO 连接手册

define("DATAMANAGER_CONFIG", [
    "driver" => "mysql",
    "host" => "localhost",
    "charset" => "utf8",
    "port" => 3306,
    "username" => "root",
    "password" => "",
    "database" => "",
    "timezone" => "America/Sao_Paulo",
    "options" => [
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
        PDO::ATTR_CASE => PDO::CASE_NATURAL,
        PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING
    ],
    "dateformat" => "d/m/Y",
    "datetimeformat" => "d/m/Y H:i:s",
    "lang" => "pt_br"
]);

您的模型

datamanager 基于MVC结构。要使用它,需要创建表的模型并继承 datamanager\Model。

datamanager 基于MVC结构。要使用它,需要创建表的模型并继承 datamanager\Model。

namespace Model;

use HnrAzevedo\Datamanager\Model;

class User extends Model
{
    public function __construct()
    {
        /* To return something in place in the database table field in case of errors. */
        /* NOTE: its definition is optional. */
        $this->fields = [
            'email' => 'Email',
            'username' => 'Nome de usuário'
        ];

        /**
         * @param string Table name
         * @param string Primary key column
         */
        parent::create('user', 'id');
    }
}

方法

查找

use Model\User;
    
$entity = new User();

/* Find by primary key */
$user = $entity->find(1)->execute()->first()->toEntity();

/* Search only for columns defined in advance  */
$user = $entity->find(1)->only(['name','email'])->execute()->first();
$name = $user->name;
$email = $user->email;
/* OR */
$name = $entity->find()->only('name')->execute()->first()->name;

/* Search except for columns defined in advance  */
$user = $entity->find()->except(['name','email'])->execute()->first();
/* OR */
$user = $entity->find()->except('name')->execute()->first();

/* Limit example */
$users = $entity->find()->limit(5)->execute()->result();
/* Offset example */
$users = $entity->find()->limit(5)->offset(5)->execute()->result();

/* OrdeBy example */
$users = $entity->find()->orderBy('birth ASC')->execute()->result();
/* OR */
$users = $entity->find()->orderBy('birth','ASC')->execute()->result();

/* Between example */
$user = $entity->find()->between([
    'AND birth'=> ['01/01/1996','31/12/1996']
    ])->execute()->first();

/* Condition AND is default */
$user = $entity->find()->between([
    'birth'=> ['01/01/1996','31/12/1996']
    ])->execute()->first();

/* Clause IN */
$user = $entity->find()->where([
    'birth'=> ['01/01/1996','31/12/1996']
    ])->execute()->first();


/* Where example */
$user->find()->where([
    ['name','=','Henri Azevedo'],
    'OR' => ['email','LIKE','otheremail@gmail.com']
])->execute();

/* Searches through all records and returns a result array */
$results = $entity->find()->execute()->result();

/* Searches for all records and returns an array of Model\User objects */
$results = $entity->find()->execute()->toEntity();

保存

$entity = new User();

$user = $entity->find()->execute()->first();

/* Change info to update */
$user->name = 'Other Name';
$user->email = 'otheremail@gmail.com';

/* Upload by primary key from the uploaded entity */
/* If the changed information is a primary key or a foreign key it will be ignored in the update */
/* NOTE: Must already have the Model returned from a query */
$user->save();

如果没有要保存的状态更改,则会抛出 DatamanagerException。

如果没有要保存的状态更改,则会抛出 DatamanagerException。

删除

use Model\User;

$entity = new User();

/* Remove by cause *Where* */
$entity->remove()->where([
    ['name','=','Other Name'],
    'OR' => ['email','LIKE','otheremail@gmail.com']
])->execute();

/* Remove by primary key */
/* NOTE: Required to have already returned a query */
$entity->remove()->execute();
/* OR */
$entity->remove(true);

持久化

use Model\User;

$entity = new User();

/* Set new info for insert in database */
$entity->name = 'Henri Azevedo';
$entity->email = 'hnr.azevedo@gmail.com';
$entity->password = password_hash('123456' ,PASSWORD_DEFAULT);
$entity->birth = '28/09/1996';
$entity->register = date('Y-m-d H:i:s');

/* Insert entity in database */
$entity->persist();

计数

use Model\User;

$entity = new User();
$registers = $entity->find()->only('id')->execute()->count();

调试

$entity = new User();

$user = $entity->find()->execute();

var_dump($user->debug());           // Return string replacing clause values
/*
 * Result:
 * string(110) " SELECT id,name,username,email,password,code,birth,register,lastaccess,status,type FROM user  WHERE   1 = '1' "
*/

var_dump($user->debug(true));       // Return array with executed string and field values ​​in separate index
/*
 * Result:
 * array(2) {
 * ["query"]=>
 *   string(112) " SELECT id,name,username,email,password,code,birth,register,lastaccess,status,type FROM user  WHERE   1 = :q_10 "
 * ["data"]=>
 *   array(1) {
 *     ["q_10"]=>
 *     string(1) "1"
 *   }
 * }
 * 
*/

缓存模型

为了避免在数据库中抽象最多的持久化错误,datamanager 在实例创建时立即以静态方式描述模型,以确保在其他应用程序时刻,如果相同的实例被实例化,则不会再次进行查询。

为了避免在数据库中抽象最多的持久化错误,datamanager 在实例创建时立即以静态方式描述模型,以确保在其他应用程序时刻,如果相同的实例被实例化,则不会再次进行查询。

为了进一步提高性能,但可能影响您应用程序的性能,可以缓存这个结构查询。以下是一个简单的在 SESSION 中的缓存示例。

为了进一步提高性能,但可能影响您应用程序的性能,可以缓存这个结构查询。以下是一个简单的在 SESSION 中的缓存示例。

namespace App\Model;

use HnrAzevedo\Datamanager\Model as Entity;

Class User extends Entity
{

    public function __construct(){
        
        $this->fields = [
            'email' => 'Email',
            'username' => 'Nome de usuário'
        ];

        if(!isset($_SESSION['cache']['datamanager'][get_class($this)])){
            parent::create('user','id');
            $_SESSION['cache']['datamanager'][get_class($this)] = serialize($this->clone());
        }
        
        $this->clone(unserialize($_SESSION['cache']['datamanager'][get_class($this)]));
        return $this;
    }

}

支持

安全:如果您发现任何与安全相关的问题,请发送电子邮件至 hnr.azevedo@gmail.com,而不是使用问题跟踪器。

Se você descobrir algum problema relacionado à segurança, envie um e-mail para hnr.azevedo@gmail.com em vez de usar o rastreador de problemas.

致谢

许可协议

MIT 许可协议(MIT)。有关更多信息,请参阅 许可文件