hnrazevedo / datamanager
datamanager 是数据库中的一个简单持久化抽象组件。
Requires
- php: >=7.4
- ext-pdo: *
This package is auto-updated.
Last update: 2024-09-09 23:11:05 UTC
README
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.
致谢
- Henri Azevedo(开发者)
许可协议
MIT 许可协议(MIT)。有关更多信息,请参阅 许可文件。