我们的项目原本使用的是 mysql 数据库,但为了提升数据库的扩展性和容错性,我们决定迁移到 cockroachdb。cockroachdb 虽然兼容 postgresql,但并非完全一致,直接使用 laravel 的 postgresql 驱动会导致一些功能失效。
我首先尝试了直接使用 laravel 的 PostgreSQL 驱动连接 CockroachDB,并对代码进行了一些调整。然而,很快我就遇到了麻烦。例如,在进行数据删除时,如果使用了 JOIN 语句,程序就会抛出错误。此外,CockroachDB 不支持 PostgreSQL 的全文搜索功能,这对于我们的项目来说是一个很大的限制。
在一番搜索之后,我找到了 ylsideas/cockroachdb-laravel 这个 composer 包。它是一个专为 Laravel 设计的 CockroachDB 驱动程序,能够很好地处理 CockroachDB 和 Laravel 之间的兼容性问题。安装非常简单,只需一条 Composer 命令:
composer require ylsideas/cockroachdb-laravel
安装完成后,需要在 Laravel 的数据库配置文件 .env 中添加一个新的数据库连接:
'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', ''), // For CockroachDB serverless],
记得将 DB_CONNECTION 设置为 crdb。 这个包还支持使用 DATABASE_URL 进行配置,方便快捷。
使用 ylsideas/cockroachdb-laravel 后,之前遇到的问题都迎刃而解了。JOIN 语句在删除操作中能够正常工作,而且不再需要担心全文搜索功能的缺失。 此外,它还特别支持 CockroachDB Serverless,只需要在配置中添加 cluster 参数即可。
总而言之,ylsideas/cockroachdb-laravel 这个 Composer 包极大地简化了 Laravel 应用与 CockroachDB 的集成过程,提高了开发效率,避免了不必要的兼容性问题。 如果你也在使用 Laravel 和 CockroachDB,强烈推荐你尝试一下这个包。 它让我在项目开发中省去了不少时间和精力,让我可以专注于业务逻辑的实现。 如果你想了解更多关于 Composer 的知识,可以参考这个在线学习地址:学习地址。