Search by

ThinkPHP orm driver for DM(达梦),KingDatabase(金仓)

Package info

github.com/hbh112233abc/db

pkg:composer/bingher/db

Statistics

Installs: 355

Dependents: 0

Suggesters: 0

Stars: 11

Open Issues: 0

v1.6.0 2026-09-14 05:47 UTC

README

安装

composer require bingher/db

DM8(达梦)

config.database.php配置参考如下:

return [
    // 默认使用的数据库连接配置
    'default'         => env('DB_DRIVER', 'dm'),

    ...

    // 数据库连接配置信息
    'connections'     => [
        'dm'          => [
            // ★Builder类
            'builder'         => \bingher\db\builder\DM::class,
            // ★Query类
            'query'         => \bingher\db\query\DM::class,
            // ★数据库类型
            'type'            => \bingher\db\connector\DM::class,
            ...
        ],
    ]
];

GBase8s(南大通用)

config.database.php配置参考如下:

return [
    // 默认使用的数据库连接配置
    'default'         => env('DB_DRIVER', 'gbase'),

    ...

    // 数据库连接配置信息
    'connections'     => [
        'gbase'          => [
            // ★Builder类
            'builder'         => bingher\db\builder\GBase::class,
            // ★Query类
            'query'         => bingher\db\query\GBase::class,
            // ★数据库类型
            'type'            => bingher\db\connector\GBase::class,
            // ★驱动类型: pdo_gbasedbt,pdo_odbc
            'driver'          => env('C_DRIVER', 'pdo_odbc'),
            ...
        ],
    ]
];

OpenGauss(高斯)

config.database.php配置参考如下:

return [
    // 默认使用的数据库连接配置
    'default'         => env('DB_DRIVER', 'gauss'),

    ...

    // 数据库连接配置信息
    'connections'     => [
        'gauss'          => [
            // ★Builder类
            'builder'         => bingher\db\builder\OpenGauss::class,
            // ★Query类
            'query'         => bingher\db\query\OpenGauss::class,
            // ★数据库类型
            'type'            => bingher\db\connector\OpenGauss::class,
            ...
        ],
    ]
];

KingBase(金仓)

config.database.php配置参考如下:

return [
    // 默认使用的数据库连接配置
    'default'         => env('DB_DRIVER', 'kdb'),

    ...

    // 数据库连接配置信息
    'connections'     => [
        'kdb'          => [
            // ★Builder类
            'builder'         => bingher\db\builder\KingBase::class,
            // ★Query类
            'query'         => bingher\db\query\KingBase::class,
            // ★数据库类型
            'type'            => bingher\db\connector\KingBase::class,
            ...
        ],
    ]
];

Meilisearch(搜索引擎)

src/meilisearch/ 提供了一套 ThinkORM 风格的 Meilisearch 客户端,与 ThinkPHP 的 Db 门面写法保持一致, 底层基于官方 SDK meilisearch/meilisearch-php,写操作默认等待服务端任务完成(同步语义)。

安装

composer require bingher/db

Meilisearch 客户端为可选功能,按需安装其 SDK 依赖即可(不安装不影响达梦/GBase 等既有驱动):

composer require meilisearch/meilisearch-php guzzlehttp/guzzle

若未安装就调用 Client / Model 连接 Meilisearch,会抛出提示安装的异常。

配置

新增 config/meilisearch.php(该目录未纳入版本控制,密钥不会入库):

return [
    // 默认连接
    'default'          => 'main',
    // 索引名前缀
    'prefix'           => '',
    // 写操作是否等待 Meilisearch 任务完成
    'wait'             => true,
    // 等待任务超时时间(毫秒)
    'task_timeout'     => 10000,
    // 轮询任务间隔(毫秒)
    'task_interval'    => 50,
    // 未指定 limit 时的默认返回条数
    'limit'            => 1000,
    // 按条件批量更新/删除时最多处理的文档数(0 表示不限)
    'max_update_rows'  => 1000,

    'connections'      => [
        'main' => [
            // 服务地址
            'host'    => 'http://127.0.0.1:7700',
            // API Key
            'api_key' => '',
        ],
    ],
];

也可以在运行时注入配置(不依赖框架配置时):

use bingher\db\meilisearch\Client as Meili;

Meili::setConfig([
    'connections' => [
        'main' => [
            'host'    => 'http://127.0.0.1:7700',
            'api_key' => 'your-key',
        ],
    ],
]);

查询器写法

use bingher\db\meilisearch\Client as Meili;

// 查询
$list = Meili::table('books')
    ->where('category', '技术')
    ->where('price', '>=', 50)
    ->whereIn('id', [1, 2, 3])
    ->order('price', 'desc')
    ->limit(10)
    ->select();

// 全文检索(等价于 Meilisearch 的 q 参数)
$list = Meili::table('books')->search('php', ['title', 'author'])->select();

// like 查询会自动转换为全文检索关键词
$list = Meili::table('books')->whereLike('title', '%php%')->select();

// 单条、字段、统计、分页
$book    = Meili::table('books')->find(1);
$title   = Meili::table('books')->where('id', 1)->value('title');
$count   = Meili::table('books')->where('status', 1)->count();
$page    = Meili::table('books')->paginate(15);   // 返回 think\Paginator

// 写入
Meili::table('books')->insert([...]);
Meili::table('books')->insertAll($dataList);
Meili::table('books')->where('category', '技术')->update(['status' => 1]);
Meili::table('books')->where('id', 1)->delete();

// 调试:查看编译后的 filter 与请求参数
echo Meili::table('books')->where('status', 1)->getFilter();
dump(Meili::table('books')->where('status', 1)->getSearchParams());

// 原生参数透传
Meili::table('books')->option('showRankingScore', true)->select();

模型写法

use bingher\db\meilisearch\Model;

class Book extends Model
{
    // 索引名(等价 ThinkORM 的表名,未设置时由类名转换)
    protected $index = 'books';

    // 软删除字段(置空表示不启用)
    protected $deleteTime = 'delete_time';

    protected $type = ['price' => 'float', 'status' => 'int'];
}

Book::find(1);
Book::where('category', '技术')->order('price', 'desc')->select();
Book::create(['title' => 'PHP 实战', 'price' => 88.5]);

$book        = Book::find(1);
$book->price = 99;
$book->save();

$book->delete();                 // 软删除
Book::destroy([1, 2], true);     // 物理删除
Book::withTrashed()->where('id', 1)->find();
Book::onlyTrashed()->select();
$book->restore();                // 恢复软删除

注意事项

  1. 必须先配置索引属性:参与 where 过滤、排序、检索的字段需要加入 filterableAttributessortableAttributessearchableAttributes,否则服务端会报错:
Meili::table('books')->updateSettings([
    'searchableAttributes' => ['title', 'author'],
    'filterableAttributes' => ['id', 'category', 'price', 'status', 'delete_time'],
    'sortableAttributes'   => ['id', 'price'],
]);
  1. Meilisearch 的空值语义与 SQL 不同:缺失字段被服务端视为"非空"。因此 whereNull() 与软删除的默认条件会编译为 ( 字段 IS NULL OR 字段 NOT EXISTS ),与 ORM 直觉保持一致。
  2. Meilisearch 无聚合与关联:未提供 sum() / avg() / join() 等方法,需要时请自行取回数据处理。
  3. 写操作为异步任务:本客户端默认等待任务完成(wait 配置),失败会抛出异常并附带中文排查提示。
  4. withoutField() 为客户端过滤:Meilisearch 只支持指定返回字段,无法在服务端排除字段。

参考资料

Meilisearch

达梦数据库

南大通用数据库

OpenGauss

create user 用户名 with sysadmin login password '密码';
  • 创建兼容mysql的数据库

DBCOMPATIBILITY 取值范围:A、B、C、PG。分别表示兼容 O、MY、TD和POSTGRES

create database 数据库名 owner gbase8s DBCOMPATIBILITY= 'B' ENCODING 'UTF8' LC_COLLATE'en_US.UTF-8' LC_CTYPE'en_US.UTF-8'