ylsideas / cockroachdb-laravel
这是我创建的包 cockroachdb-laravel
Requires
- php: ^8.2
- illuminate/contracts: 11.*|10.*|9.*
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- doctrine/dbal: ^3.2
- larastan/larastan: ^2.0
- laravel/pint: ^1.2
- nunomaduro/collision: ^8.1|7.2|^6.0|^5.10
- orchestra/testbench: ^9.0|^8.0|^7.0
- pestphp/pest: ^1.21|^2.23
- pestphp/pest-plugin-laravel: ^1.1|^2.2
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- rector/rector: ^0.14.2|^1.0
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-09-08 12:02:41 UTC
README
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)。有关更多信息,请参阅许可证文件。