vuthaihoc / crdb-laravel
这是我用于CockroachDB的Laravel包
Requires
- php: ^8.1
- illuminate/contracts: 10.*|9.*|8.*
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- doctrine/dbal: ^3.2
- laravel/pint: ^1.2
- nunomaduro/collision: ^7.2
- nunomaduro/larastan: ^2.0|^1.0
- orchestra/testbench: ^8.0|^7.0|^6.24
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- rector/rector: ^0.14.2
- spatie/laravel-ray: ^1.26
README
这是一个用于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)。有关更多信息,请参阅许可文件。