ylsideas/cockroachdb-laravel

这是我创建的包 cockroachdb-laravel

v1.4.0 2024-03-24 18:07 UTC

README

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

Laravel 的驱动/语法,适用于 CockroachDB。虽然 CockroachDB 与 Postgresql 兼容,但这种支持并不是 1:1,这意味着您可能会遇到问题,该驱动程序希望尽可能解决这些问题。

支持并测试了从 Laravel 9 到 Laravel 11,与 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

用法

要启用,请在 .env 中设置 DB_CONNECTION=crdb

注意

CockroachDB 应该与 Postgresql 的功能集兼容,有一些例外。您可以在 CockroachDB 文档 中查看每个 CockroachDB 服务器的功能。

使用 JOIN 的删除

CockroachDB 不支持使用 JOIN 执行删除。如果您想执行类似操作,您需要使用子查询。

目前,如果您尝试在 Query builder 的 delete 方法与 join 一起使用时,将抛出 YlsIdeas\CockroachDb\Exceptions\FeatureNotSupportedException 异常。

全文搜索

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

目前,如果您尝试使用 Schema builder 创建全文索引或尝试使用 Query builder 的 whereFulltext 方法,将抛出 YlsIdeas\CockroachDb\Exceptions\FeatureNotSupportedException 异常。

无服务器支持

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

Schema Dumps

您可以使用 schema dumps。我不确定该功能是否与其它驱动程序完全一致。如果您发现它不按预期工作,请提出问题。

'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)。有关更多信息,请参阅许可证文件