underpin/berlindb-extension 问题修复 & 功能扩展

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

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

underpin/berlindb-extension

Composer 安装命令:

composer require underpin/berlindb-extension

包简介

BerlinDB Implementation for Underpin

README 文档

README

BerlinDB Integration for the Underpin WordPress framework.

A few key benefits:

  1. Tables are registered through a Database_Model class. This class provides useful context that makes working with BerlinDB a little easier helps keep your code DRY.
  2. All tables are stored in a registry. This allows you to interact with all tables at one time. Need to uninstall everything? You can do that with a single method, instead of manually looping through tables.
  3. All CRUD actions happen through database model instead of creating Query instances everywhere.

Installation

Using Composer

composer require underpin/berlindb-extension

Manually

This plugin uses a built-in autoloader, so as long as BerlinDB is required before this extension, it should work as-expected.

require_once(__DIR__ . '/underpin-berlin-db/underpin-berlin-db.php');

Setup

  1. Install BerlinDB
  2. Install Underpin. See Underpin Docs
  3. Create BerlinDB classes.
  4. Register new database models as-needed.

Example

If you currently have all BerlinDB classes built, you can reference them directly like-so. This will create a new database model called example, which can be referenced with underpin()->berlin_db()->get('example').

underpin()->berlin_db()->add( 'example', [
	'table'             => 'Namespace\To\Berlin_DB\Table',
	'schema'            => 'Namespace\To\Berlin_DB\Schema',
	'query'             => 'Namespace\To\Berlin_DB\Query',
	'name'              => 'Human Readable Table Name',
	'description'       => 'Description of the purpose of this table',
	'sanitize_callback' => function( $key, $value ){
		// Function to sanitize fields before saving.
	}
] );

Alternatively, you can extend Database_Model and reference the extended class directly, like so:

underpin()->berlin_db()->add('database-model-key','Namespace\To\Class');

Working With the Model

Once registered, you can access any of the classes inside the model using the various helper methods.

// Run a query using the specified model
underpin()->berlin_db()->get('example')->query([/*...*/]);

// Get table object
underpin()->berlin_db()->get('example')->table();

// Get schema
underpin()->berlin_db()->get('example')->schema();

Creating, Updating, and Deleting

The model includes a handful of helper functions to make it a little easier to update data.

// Automatically sanitize, and then create/update a record.
// If the provided arguments include an ID, it will update that record.
// Otherwise, it will simply create a new record.
$id = underpin()->berlin_db()->get('example')->save( [/*...*/] );

// Delete a record
$deleted = underpin()->berlin_db()->get('example')->delete( $id );

Table Setup

// Install all tables
underpin()->berlin_db()->install();

// Reset all tables
underpin()->berlin_db()->reset();

// Delete all tables
underpin()->berlin_db()->uninstall();

Meta Tables

If a database model also has a meta table, it is possible to instruct the model to make that table accessible in the model. To-do this, you simply have to use the Database_Model_With_Meta_Instance when registering your model.

// Meta Table
underpin()->berlin_db()->add( 'example-meta-table', [
	'table'             => 'Namespace\To\Berlin_DB\Table',
	'schema'            => 'Namespace\To\Berlin_DB\Schema',
	'query'             => 'Namespace\To\Berlin_DB\Query',
	'name'              => 'Human Readable Table Name',
	'description'       => 'Description of the purpose of this table',
	'sanitize_callback' => function( $key, $value ){
		// Function to sanitize fields before saving.
	}
] );

// Table
underpin()->berlin_db()->add( 'example', [
    'class' => 'Underpin_BerlinDB\Factories\Database_Model_With_Meta_Instance',
    'args' => [
       'table'             => 'Namespace\To\Berlin_DB\Table',
       'schema'            => 'Namespace\To\Berlin_DB\Schema',
       'query'             => 'Namespace\To\Berlin_DB\Query',
       'name'              => 'Human Readable Table Name',
       'description'       => 'Description of the purpose of this table',
       'sanitize_callback' => function( $key, $value ){
           // Function to sanitize fields before saving.
       },
       'get_meta_table_callback' => function(){
          return underpin()->berlin_db()->get('example-meta-table');
       }
	]
] );

Alternatively, you can extend Database_Model, use the With_Meta trait, and then reference the extended class directly, like so:

underpin()->berlin_db()->add('database-model-key','Namespace\To\Class\Using\With_Meta\Trait');

With this setup, you now have access to a few other methods from within the example model's context.

//add_meta
underpin()->berlin_db()->get('example')->add_meta(/*...*/);

//update_meta
underpin()->berlin_db()->get('example')->update_meta(/*...*/);

//delete_meta
underpin()->berlin_db()->get('example')->delete_meta(/*...*/);

//get_meta
underpin()->berlin_db()->get('example')->get_meta(/*...*/);

underpin/berlindb-extension 适用场景与选型建议

underpin/berlindb-extension 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 49 次下载、GitHub Stars 达 1, 最近一次更新时间为 2021 年 05 月 03 日, 在 PHP 生态内属于活跃度较高的组件。

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

围绕 underpin/berlindb-extension 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: GPL-2.0-or-later
  • 更新时间: 2021-05-03