nttech/datalayer 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

nttech/datalayer

Composer 安装命令:

composer require nttech/datalayer

包简介

The data layer is a persistent abstraction component of your database that PDO

README 文档

README

Maintainer Source Code PHP from Packagist Latest Version Software License Build Quality Score Total Downloads

O DataLayer é um componente para abstração de persistência para banco de dados, que usa PDO com prepared statements para executar rotinas comuns como cadastrar, ler, editar e remover dados.

Destaques

  • Fácil de configurar
  • Conecte-se com multiplos bancos de dados
  • Abstração total do CRUD
  • Crie modelos seguros
  • Pronto para o composer
  • Compatível com PSR-2

Instalação

DataLayer está disponível via Composer:

"nttech/datalayer": "v1.0.0"

ou execute

composer require nttech/datalayer

Documentação

Para obter mais detalhes sobre como usar o DataLayer, consulte a pasta de amostra com detalhes no diretório do componente.

Conexão

Para começar a usar o DataLayer, precisamos de uma conexão com o seu banco de dados. Para ver as conexões possíveis, acesse o manual de conexões do PDO em PHP.net

Para conectar somente um banco de dados:

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,
	],
]);

Para conectar dois ou mais bancos de dados:

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,
		],
	],
	// ...
]);
Chave personalizada (int|string)

Quando definida, deve ser utilizada nas classes de modelo para se conectar ao banco de dados definido em dbname.

Classe Modelo

O DataLayer é baseado em uma estrutura MVC com os padrões de projeto Layer Super Type e Active Record. Logo, para consumir, é necessário criar o modelo de sua tabela e herdar o DataLayer.

class User extends DataLayer
{
    public function __construct()
    {
        parent::__construct(string $entity, ?array $required = [], string $primary = 'id', mixed $timestamps = false, ?string $database = null);
    }
}

Parâmetros

entity (obrigatório)

Nome da tabela.

required (opcional, padrão: [])

Os nomes das colunas definidas como NOT NULL.

primary (opcional, padrão: id)

Chave primária. Este parâmetro não pode ser null.

timestamps (opcional, padrão: false)

Aceita os tipos booleano e string. É usado, especificamente, quando há colunas created_at e/ou updated_at.

boolean
False, se nenhuma das colunas existirem. True, se ambas existirem.

string
Se existir somente uma delas, especifique o seu nome.

database (opcional, padrão: null)

Nome do banco de dados ou chave personalizada(quando definida) ao qual este modelo se conectará.

Este parâmetro só deve ser especificado se DATA_LAYER_CONFIG for configurada para se conectar com dois ou mais bancos de dados.

find

Consulta no banco de dados.

<?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

Consulta pela chave primária definida no parâmetro $primary da classe modelo.

<?php
use Example\Models\User;

$model = new User();
$user = $model->findByPrimaryKey('giovanni.al.oliveira@gmail.com');
echo $user->first_name;

findById

Consulta pela coluna id, se definida.

<?php
use Example\Models\User;

$model = new User();
$user = $model->findById(2);
echo $user->first_name;

Parâmetros seguros

Consulte o exemplo no arquivo find_example.php e classe modelo 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

Conta o total de registros encontrados.

<?php
use Example\Models\User;
$model = new User();
$count = $model->find()->count();
echo $count;

make save

Cria um registro no banco de dados.

<?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

Atualiza um registro no banco de dados.

<?php
use Example\Models\User;

$user = (new User())->findById(2);
$user->last_name = 'Alves de Lima Oliveira';
$user->change()->save();

functionSql

Permite, ao criar ou atualizar um registro, utilizar funções SQL para tratar os dados.

<?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

Deleta um registro no banco de dados.

<?php
use Example\Models\User;

$user = (new User())->findById(2);
$user->destroy();

fail

Retorna os erros, caso ocorra, na tentativa de executar uma operação no banco de dados.

<?php
use Example\Models\User;

$user = (new User())->findById(2);

if($user->fail()){
    echo $user->fail()->getMessage();
}

Métodos de dados personalizados

Crie métodos para realizar determinados processamentos na obtenção de dados.

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

Contribuindo

Envie relatórios de bugs, sugestões e solicitações de pull para o rastreador de problemas do GitHub.

Suporte

Se você descobrir algum problema relacionado à segurança, use o rastreador de problemas do GitHub.

Agradecido (õ.~)

Licença

A Licença do MIT. Por favor, veja o Arquivo de Licença para maiores informações.

nttech/datalayer 适用场景与选型建议

nttech/datalayer 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 41 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 07 月 01 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「database」 「pdo」 「crud」 「delete」 「save」 「destroy」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 nttech/datalayer 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 nttech/datalayer 我们能提供哪些服务?
定制开发 / 二次开发

基于 nttech/datalayer 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 41
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 16
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-07-01