承接 market-media/datalayer 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

market-media/datalayer

Composer 安装命令:

composer require market-media/datalayer

包简介

O datalayer é um componente de abstração persistente do seu banco de dados que utiliza PDO.

README 文档

README

O data layer é um componente para abstração de persistência no seu 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 (Fácil de configurar)
  • Asbtração total do CRUD
  • Criar modelos seguros (Crie de modelos seguros)
  • Compositor pronto (Pronto para o compositor)
  • Compatível com PSR-2 (Compatível com PSR-2)

Instalação

A camada de dados está disponível via Composer:

"market-media/datalayer": "2.0.*"

ou rode

composer require market-media/datalayer

Documentação

Para mais detalhes sobre como usar o Data Layer, veja a pasta de exemplo com detalhes no diretório do componente

Conexão

Para começar a usar o Data Layer 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

const 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
    ]
];

Seu modelo

O Data Layer é 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 Data Layer.

<?php

class User extends DataLayer
{
    /**
     * User constructor.
     */
    public function __construct()
    {
        //string "TABLE_NAME", array ["REQUIRED_FIELD_1", "REQUIRED_FIELD_2"], string "PRIMARY_KEY", bool "TIMESTAMPS"
        parent::__construct("users", ["first_name", "last_name"]);
    }
}

find

<?php

use Example\Models\User;

$model = new User();

//find all users
$users = $model->find()->fetch(true);

//find all users limit 2
$users = $model->find()->limit(2)->fetch(true);

//find all users limit 2 offset 2
$users = $model->find()->limit(2)->offset(2)->fetch(true);

//find all users limit 2 offset 2 order by field ASC
$users = $model->find()->limit(2)->offset(2)->order("first_name ASC")->fetch(true);

// find all users with in operator
$users = $model->find()->in("id", [1, 2, 3])->fetch(true);

//looping users
foreach ($users as $user) {
    echo $user->first_name;
}

//find one user by condition
$user = $model->find("first_name = :name", "name=Robson")->fetch();
echo $user->first_name;

//find one user by two conditions
$user = $model->find("first_name = :name AND last_name = :last", "name=Robson&last=Leite")->fetch();
echo $user->first_name . " " . $user->first_last;

//find one user by condition and with in operator
$user = $model->find("first_name = :name", "name=Robson")->in("last_name",["Menezes", "Sampaio"])->fetch(true);

foreach ($users as $user) {
    echo $user->first_name . " " . $user->first_last;
}

findById

<?php

use Example\Models\User;

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

secure params

Consulte exemplo find_example.php e classes modelo

<?php

$params = http_build_query(["name" => "UpInside & Associated"]);
$company = (new Company())->find("name = :name", $params);
var_dump($company, $company->fetch());

join method

Consulte exemplo find_example.php e classes modelo

<?php

$addresses = new Address();
$address = $addresses->findById(22);
//get user data to this->user->[all data]
$address->user();
var_dump($address);

count

<?php

use Example\Models\User;

$model = new User();
$count = $model->find()->count();

save create

<?php

use Example\Models\User;

$user = new User();
$user->first_name = "Robson";
$user->last_name = "Leite";
$userId = $user->save();

save update

<?php

use Example\Models\User;

$user = (new User())->findById(2);
$user->first_name = "Robson";
$userId = $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();
}

custom data method

<?php

class User{

    public function fullName(): string 
    {
        return "{$this->first_name} {$this->last_name}";
    }
    
    public function document(): string
    {
        return "Restrict";
    }
}

echo $this->full_name; //Robson V. Leite
echo $this->document; //Restrict

join method

<?php

$user = new User();

// Exemplo usando inner JOIN
$results = $user->find("users.status = :s", "s=active", "users.id, users.name, roles.title")
    ->join("roles", "roles.id = users.role_id")
    ->fetch(true);

// Exemplo encadeando múltiplos JOINS (INNER e LEFT)
$complexResult = $user->find(null, null, "users.*, posts.title, logs.created_at")
    ->join("posts", "posts.user_id = users.id")
    ->join("logs", "logs.user_id = users.id", "LEFT")
    ->order("users.name ASC")
    ->fetch(true);

transaction

<?php

$user = new User();
$address = new Address();

// Inicia a transação
$user->beginTransaction();

// Preenche os dados do usuário
$user->first_name = "João";
$user->last_name = "Silva";

if (!$user->save()) {
    // Se falhar, desfaz a transação e exibe o erro
    $user->rollBack();
    echo $user->fail()->getMessage();
    exit;
}

// Preenche os dados do endereço com o ID do usuário recém-criado
$address->user_id = $user->id; // Aqui o Active Record já populou o ID
$address->street = "Rua das Flores";
$address->number = "123";

if (!$address->save()) {
    // Se o endereço falhar, o usuário criado acima TAMBÉM SERÁ APAGADO (Rollback)
    $address->rollBack();
    echo $address->fail()->getMessage();
    exit;
}

// Se tudo deu certo, consolida as alterações no banco de dados
$user->commit();

echo "Usuário e endereço cadastrados com sucesso!";

License

The MIT License (MIT). Please see License File for more information.

market-media/datalayer 适用场景与选型建议

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

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

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

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-08