我們的項(xiàng)目原本使用的是 mysql 數(shù)據(jù)庫,但為了提升數(shù)據(jù)庫的擴(kuò)展性和容錯性,我們決定遷移到 cockroachdb。cockroachdb 雖然兼容 postgresql,但并非完全一致,直接使用 laravel 的 postgresql 驅(qū)動會導(dǎo)致一些功能失效。
我首先嘗試了直接使用 laravel 的 PostgreSQL 驅(qū)動連接 CockroachDB,并對代碼進(jìn)行了一些調(diào)整。然而,很快我就遇到了麻煩。例如,在進(jìn)行數(shù)據(jù)刪除時,如果使用了 JOIN 語句,程序就會拋出錯誤。此外,CockroachDB 不支持 PostgreSQL 的全文搜索功能,這對于我們的項(xiàng)目來說是一個很大的限制。
在一番搜索之后,我找到了 ylsideas/cockroachdb-laravel 這個 composer 包。它是一個專為 Laravel 設(shè)計(jì)的 CockroachDB 驅(qū)動程序,能夠很好地處理 CockroachDB 和 Laravel 之間的兼容性問題。安裝非常簡單,只需一條 Composer 命令:
composer require ylsideas/cockroachdb-laravel
安裝完成后,需要在 Laravel 的數(shù)據(jù)庫配置文件 .env 中添加一個新的數(shù)據(jù)庫連接:
'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 設(shè)置為 crdb。 這個包還支持使用 DATABASE_URL 進(jìn)行配置,方便快捷。
使用 ylsideas/cockroachdb-laravel 后,之前遇到的問題都迎刃而解了。JOIN 語句在刪除操作中能夠正常工作,而且不再需要擔(dān)心全文搜索功能的缺失。 此外,它還特別支持 CockroachDB Serverless,只需要在配置中添加 cluster 參數(shù)即可。
總而言之,ylsideas/cockroachdb-laravel 這個 Composer 包極大地簡化了 Laravel 應(yīng)用與 CockroachDB 的集成過程,提高了開發(fā)效率,避免了不必要的兼容性問題。 如果你也在使用 Laravel 和 CockroachDB,強(qiáng)烈推薦你嘗試一下這個包。 它讓我在項(xiàng)目開發(fā)中省去了不少時間和精力,讓我可以專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。 如果你想了解更多關(guān)于 Composer 的知識,可以參考這個在線學(xué)習(xí)地址:學(xué)習(xí)地址。