vuthaihoc/crdb-laravel

这是我用于CockroachDB的Laravel包

v1.3.4 2024-02-05 17:30 UTC

This package is auto-updated.

Last update: 2024-08-26 10:38:45 UTC


README

Latest Version on Packagist PHPUnit Tests Check & fix styling Total Downloads codecov Help Fund License PHP Version Require

这是一个用于Laravel的CockroachDB驱动/语法,虽然CockroachDB与Postgresql兼容,但这种支持并不是一一对应的,这意味着您可能会遇到问题,这个驱动试图尽可能地解决这些问题。

支持并测试了Laravel 9到Laravel 10,与CockroachDB 22 & 23兼容。

支持开源

我是Peter Fox,在这里我想说这个项目是我做过的最艰难的,制作这个项目真的非常辛苦,我花费了大量时间来组织测试套件,以确保Eloquent和CockroachDB之间的兼容性。

我认为使用CockroachDB的无服务器产品有很大的潜力,这就是我最初选择这条路的原因。您可以阅读我写的关于使用他们服务的文章

如果您使用这个项目,请考虑资助我,以此鼓励更多的开发。

安装

您可以通过composer安装此包

composer require ylsideas/cockroachdb-laravel

您需要将连接类型添加到数据库配置中

'crdb' => [
    'driver' => 'crdb',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '26257'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'schema' => 'public',
    'sslmode' => 'prefer',
]

您也可以使用URL。

DATABASE_URL=cockroachdb://<username>:<password>@<host>:<port>/<database>?sslmode=verify-full

用法

要启用,请将DB_CONNECTION=crdb设置在您的.env文件中。

  • 使用storing(当创建索引或唯一索引时)

    $table->string('email'); $table->unique('email')->storing('password');

注意

CockroachDB应该与Postgresql的功能集无缝工作,但有例外。您可以在CockroachDB的文档中查看每个CockroachDB服务器的功能。

与连接一起删除

CockroachDB不支持使用连接进行删除操作。如果您想进行此类操作,您需要使用子查询。

目前,如果您尝试同时调用查询构建器的delete方法和join,则会抛出YlsIdeas\CockroachDb\Exceptions\FeatureNotSupportedException异常。

全文搜索

Eloquent和Postgresql支持全文搜索。CockroachDB不支持任何全文搜索,这意味着在使用此驱动时无法使用此功能。

目前,如果您尝试使用Schema构建器创建全文索引或尝试使用查询构建器的whereFulltext方法,则会抛出YlsIdeas\CockroachDb\Exceptions\FeatureNotSupportedException异常。

无服务器支持

Cockroach Serverless需要您提供一个具有连接的集群。Laravel没有提供这项功能,因此它作为数据库配置中的额外cluster参数实现。只需传递CockroachDB Serverless的集群标识符。

模式转储

您可以使用模式转储。我不确定该功能是否与其他驱动程序的功能一致。如果您发现它不符合预期,请提出问题。

'crdb' => [
    'driver' => 'crdb',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '26257'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'schema' => 'public',
    'sslmode' => 'prefer',
    'cluster' => env('COCKROACHDB_CLUSTER', ''),
]

您还可以使用以下格式的URL。

DATABASE_URL=cockroachdb://<username>:<password>@<host>:<port>/<database>?sslmode=verify-full&cluster=<cluster>

测试

测试尝试尽可能遵循Laravel提供的语法功能,直接从laravel/framework中提取测试,这确实带来了一些复杂性。特别是,CockroachDB被设计为分布式数据库,因此主键不会按顺序出现。

测试还应尝试与Laravel的最新版本兼容,以及Laravel 8、9和10,这需要跳过一些测试。

您可以使用Docker Compose启动本地CockroachDB测试实例。

docker-composer up -d

如果需要,您可以使用不同的CockroachDB版本运行docker compose文件。

VERSION=v23.1.13 docker-compose up -d

然后运行以下PHP脚本来创建测试数据库和用户

php ./database.php

之后,您可以运行测试套件。

composer test

要清理,只需停止docker composer。

docker-composer down

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅我们的安全策略

鸣谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件