定制 ufpel-csi/cobalto-php-activerecord 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

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

ufpel-csi/cobalto-php-activerecord

Composer 安装命令:

composer require ufpel-csi/cobalto-php-activerecord

包简介

cobalto-php-activerecord is an open source ORM library for mysql and postgres based on the ActiveRecord pattern.

README 文档

README

Introdução

Um breve resumo do que é ActiveRecord:

Registro ativo é uma abordagem para acessar dados em um banco de dados. Uma tabela ou visualização do banco de dados é agrupada em uma classe, assim, uma instância de objeto está vinculada a uma única linha na tabela. Após a criação de um objeto, uma nova linha é adicionada a a tabela ao salvar. Qualquer objeto carregado obtém suas informações do banco de dados; quando um objeto é atualizado, o linha correspondente na tabela também é atualizada. A classe wrapper implementa métodos de acesso ou propriedades para cada coluna na tabela ou visualização.

Mais detalhes podem ser encontrados aqui.

Essa implementação é inspirada e, portanto, empresta muito do ActiveRecord do Ruby on Rails. Tentamos manter suas convenções enquanto nos desviamos principalmente por conveniência ou necessidade. Claro, existem algumas diferenças que serão óbvias para o usuário se ele estiver familiarizado com trilhos.

Minimum Requirements

  • PHP >= 7.0.0 and <= 7.4
  • Driver PDO para seu respectivo banco de dados com personalizações feitas pela equipe de desenvolvimento da ufpel

Supported Databases

  • MySQL
  • PostgreSQL

Features

  • Finder methods
  • Dynamic finder methods
  • Writer methods
  • Relationships
  • Validations
  • Callbacks
  • Serializations (json/xml)
  • Transactions
  • Support for multiple adapters
  • Miscellaneous options such as: aliased/protected/accessible attributes

Instalação

composer require ufpel-csi/cobalto-php-activerecord

Configuração

A configuração é muito fácil e direta. Existem essencialmente apenas três pontos de configuração com os quais você deve se preocupar:

  1. Configurando o diretório auto_load do modelo.
  2. Configurando suas conexões de banco de dados.
  3. Configurando a conexão do banco de dados a ser usada em seu ambiente.

Exemplo:

ActiveRecord\Config::initialize(function($cfg)
{
   $cfg->set_model_directory('/path/to/your/model_directory');
   $cfg->set_connections(
     array(
       'development' => 'mysql://username:password@localhost/development_database_name',
       'test' => 'mysql://username:password@localhost/test_database_name',
       'production' => 'mysql://username:password@localhost/production_database_name'
     )
   );
});

O PHP ActiveRecord será o padrão para usar seu banco de dados de desenvolvimento. Para teste ou produção, basta definir o padrão conexão de acordo com seu ambiente atual ('teste' ou 'produção'):

ActiveRecord\Config::initialize(function($cfg)
{
  $cfg->set_default_connection(your_environment);
});

Depois de definir essas três configurações, você estará pronto. ActiveRecord cuida do resto para você. Ele não requer que você mapeie seu esquema de tabela para arquivos yaml/xml. Ele consultará o banco de dados para obter essas informações e armazene-o em cache para que não faça várias chamadas ao banco de dados para um único esquema.

Testes

docker-compose up

docker-compose exec web-record vendor/bin/phpunit -c phpunit.xml test/

Exemplos

Retrieve

Estes são seus métodos básicos para encontrar e recuperar registros de seu banco de dados. Veja a seção Finders para mais detalhes.

$post = Post::find(1);
echo $post->title; # 'My first blog post!!'
echo $post->author_id; # 5

# also the same since it is the first record in the db
$post = Post::first();

# finding using dynamic finders
$post = Post::find_by_name('The Decider');
$post = Post::find_by_name_and_id('The Bridge Builder',100);
$post = Post::find_by_name_or_id('The Bridge Builder',100);

# finding using a conditions array
$posts = Post::find('all',array('conditions' => array('name=? or id > ?','The Bridge Builder',100)));

Create

Aqui criamos uma nova postagem instanciando um novo objeto e então invocando o método save().

$post = new Post();
$post->title = 'My first blog post!!';
$post->author_id = 5;
$post->save();
# INSERT INTO `posts` (title,author_id) VALUES('My first blog post!!', 5)

Update

Para atualizar, você só precisa encontrar um registro primeiro e depois alterar um de seus atributos. Ele mantém um array de atributos que estão "sujos" (que foram modificados) e assim nosso sql só atualizará os campos modificados.

$post = Post::find(1);
echo $post->title; # 'My first blog post!!'
$post->title = 'Some real title';
$post->save();
# UPDATE `posts` SET title='Some real title' WHERE id=1

$post->title = 'New real title';
$post->author_id = 1;
$post->save();
# UPDATE `posts` SET title='New real title', author_id=1 WHERE id=1

Delete

Excluir um registro não destruirá o objeto. Isso significa que ele chamará sql para deletar o registro em seu banco de dados, mas você ainda pode usar o objeto se precisar.

$post = Post::find(1);
$post->delete();
# DELETE FROM `posts` WHERE id=1
echo $post->title; # 'New real title'

Créditos

Todo o código abaixo é baseado na biblioteca php-activerecord, originalmente criada por: kien la Jacques Fuentes

http://www.phpactiverecord.org/

ufpel-csi/cobalto-php-activerecord 适用场景与选型建议

ufpel-csi/cobalto-php-activerecord 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 332 次下载、GitHub Stars 达 1, 最近一次更新时间为 2023 年 04 月 06 日, 在 PHP 生态内属于活跃度较高的组件。

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

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

围绕 ufpel-csi/cobalto-php-activerecord 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-04-06