stonks / datalayer
DataLayer是一个用于数据库持久化抽象的组件,它使用PDO和预处理语句执行注册、读取、编辑和删除数据等常见操作。
Requires
- php: ^7.2
- ext-pdo: *
This package is auto-updated.
Last update: 2024-09-29 06:08:52 UTC
README
DataLayer是一个用于数据库持久化抽象的组件,它使用PDO和预处理语句执行注册、读取、编辑和删除数据等常见操作。
特点
- 易于配置
- 连接多个数据库
- 完全抽象CRUD
- 创建安全模型
- 适用于composer
- 兼容PSR-2
安装
DataLayer可通过Composer获得
"stonks/datalayer": "1.0.*"
或执行
composer require stonks/datalayer
文档
有关如何使用DataLayer的更多详细信息,请参阅组件目录中的详细示例文件夹。
连接
要开始使用DataLayer,我们需要与您的数据库建立连接。要查看可能的连接,请访问PHP.net上的PDO连接手册
仅连接一个数据库
define('DATA_LAYER_CONFIG', [ 'driver' => 'mysql', 'host' => 'localhost', 'port' => '3306', 'dbname' => 'datalayer_example', 'username' => 'root', 'passwd' => '', '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, ], ]);
连接两个或更多数据库
define('DATA_LAYER_CONFIG', [ 'db_1' => [ // Chave personalizada: faz referência ao datalayer_example_1 'driver' => 'mysql', 'host' => 'localhost', 'port' => '3306', 'dbname' => 'datalayer_example_1', 'username' => 'root', 'passwd' => '', '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, ], ], 0 => [ // Isto não é uma chave personalizada 'driver' => 'mysql', 'host' => 'localhost', 'port' => '3306', 'dbname' => 'datalayer_example_2', // Neste caso, a chave é o próprio nome do banco de dados 'username' => 'root', 'passwd' => '', '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, ], ], // ... ]);
自定义键 (int|string)
当定义时,必须在模型类中用于连接到在dbname中定义的数据库。
模型类
DataLayer基于MVC结构,采用Layer Super Type和Active Record设计模式。因此,为了使用它,需要创建表模型并继承DataLayer。
class User extends DataLayer { public function __construct() { parent::__construct(string $entity, ?array $required = [], string $primary = 'id', mixed $timestamps = false, ?string $database = null); } }
参数
entity (必需)
表名。
required (可选,默认: [])
定义了NOT NULL的列名。
primary (可选,默认: id)
主键。此参数不能为null。
timestamps (可选,默认: false)
接受布尔型和字符串型。当存在created_at和/或updated_at列时使用。
boolean
False,如果不存在任何列。 True,如果两个都存在。
string
如果只存在其中一个,指定其名称。
database (可选,默认: null)
数据库名称或自定义键(当定义时),该模型将连接到此数据库。
仅当DATA_LAYER_CONFIG配置为连接到两个或更多数据库时,才应指定此参数。
find
数据库查询。
<?php use Example\Models\User; $model = new User(); // Encontre todos os usuários $users = $model->find()->fetch(true); // Encontre todos os usuários por grupo $users = $model->find()->group('last_name')->fetch(true); // Encontre todos os usuários e ordene por um campo $users = $model->find()->order('email DESC')->fetch(true); // Encontre todos os usuários com limite de 2 $users = $model->find()->limit(2)->fetch(true); // Encontre todos os usuários com limite 2 e deslocamento 2 $users = $model->find()->limit(2)->offset(2)->fetch(true); // Encontre um usuário por condição (apenas termos) $user = $model->find('first_name = "Giovanni"')->fetch(); // Encontre um usuário por condição (termos e parâmetros) $user = $model->find('last_name = :last_name', 'last_name=A. L. Oliveira')->fetch(); // Encontre um usuário por duas condições $user = $model->find('first_name = :first_name AND last_name = :last_name', 'first_name=Giovanni&last_name=A. L. Oliveira')->fetch();
findByPrimaryKey
通过模型类中$primary参数定义的主键进行查询。
<?php use Example\Models\User; $model = new User(); $user = $model->findByPrimaryKey('giovanni.al.oliveira@gmail.com'); echo $user->first_name;
findById
通过列id进行查询,如果已定义。
<?php use Example\Models\User; $model = new User(); $user = $model->findById(2); echo $user->first_name;
安全参数
请参阅文件中的示例find_example.php和模型类User.php。
<?php use Example\Models\User; $params = http_build_query(['first_name' => 'Giovanni']); $model = new User(); $user = $model->find('first_name = :first_name', $params); var_dump($user, $user->fetch());
count
计算找到的记录总数。
<?php use Example\Models\User; $model = new User(); $count = $model->find()->count(); echo $count;
make save
在数据库中创建记录。
<?php use Example\Models\User; $user = new User(); $user->first_name = 'Giovanni'; $user->last_name = 'A. L. Oliveira'; $user->save(); // Ou $user->make()->save();
change save
更新数据库中的记录。
<?php use Example\Models\User; $user = (new User())->findById(2); $user->last_name = 'Alves de Lima Oliveira'; $user->change()->save();
functionSql
在创建或更新记录时,允许使用SQL函数处理数据。
<?php use Example\Models\User; $user = new User(); $user->first_name = 'Giovanni'; $user->last_name = 'A. L. Oliveira'; // $user->functionSql(string $column, string $function); $user->functionSql('name', 'CONCAT(:first_name, " ", :last_name)'); $user->save();
destroy
从数据库中删除记录。
<?php use Example\Models\User; $user = (new User())->findById(2); $user->destroy();
fail
在尝试执行数据库操作时返回错误(如果有)。
<?php use Example\Models\User; $user = (new User())->findById(2); if($user->fail()){ echo $user->fail()->getMessage(); }
自定义数据方法
创建用于在获取数据时进行特定处理的方法。
class User{ //... public function fullName(): string { return "{$this->first_name} {$this->last_name}"; } public function document(): string { return 'Restrito'; } } echo $this->full_name; // Giovanni A. L. Oliveira echo $this->document; // Restrito
贡献
向GitHub问题跟踪器发送错误报告、建议和pull请求。
支持
如果您发现与安全相关的问题,请使用GitHub的问题追踪器。
谢谢(÷.~)
许可
MIT许可。请参阅许可文件获取更多信息。