hackerboy / laravel-cockroachdb
CockroachDB 驱动程序,适用于 Laravel
This package is auto-updated.
Last update: 2024-09-28 06:00:43 UTC
README
CockroachDB 数据库驱动程序,适用于 Laravel 5
使用方法
步骤 1:通过 Composer 安装
composer require hackerboy/laravel-cockroachdb
步骤 2:添加服务提供者(在 Laravel 5.5 中此操作将自动完成)
打开 config/app.php
并将以下内容添加到 "providers" 数组中
HackerBoy\LaravelCockroachDB\CockroachServiceProvider::class
步骤 3:添加数据库驱动程序配置
打开 config/database.php
并将以下内容添加到 "connections" 数组中
'cockroach' => [ 'driver' => 'cockroach', 'host' => env('DB_HOST', 'HOSTNAME-OF-COCKROACH-SERVER'), 'port' => env('DB_PORT', '26257'), 'database' => env('DB_DATABASE', 'DATABASE-NAME'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'sslmode' => 'prefer', // Only set these keys if you want to run en secure mode // otherwise you can them out of the configuration array 'sslcert' => env('DB_SSLCERT', 'client.crt'), 'sslkey' => env('DB_SSLKEY', 'client.key'), 'sslrootcert' => env('DB_SSLROOTCERT', 'ca.crt'), ],
请确保更新 host、port、database、username、password 和 schema 以匹配您的配置。请注意,database 和 schema 字段应相同。
(蓝图)primary() 方法无法工作!
在表创建后添加主键目前不支持 源。因此,蓝图方法 $table->primary()
不会产生任何效果。
如果您想将列设置为主键,请使用 addColumn
方法。例如,如果您想将 UUID 列设置为主键
// Blueprint $table $table->addColumn('uuid', 'id', [ 'primary' => true, // Set this column as primary 'gen_random_uuid' => true // Set default value as gen_random_uuid() (https://www.cockroachlabs.com/docs/stable/uuid.html) ]);
安全模式
使用您的路径配置更新 sslcert、sslkey 和 sslrootcert。
CockroachDB 2
使用 PHP Postgres 驱动程序时,CockroachDB 对模式处理所做的更改与 Laravel 有所不同。因此,我们不需要使用
'schema' => 'DATABASE-NAME'
我们需要使用 Postgres 的默认值 public
,因此将您的配置更改为
'schema' => 'public'
并且一切应该像预期的那样工作。
已知问题
- 约束不能与表的创建放在同一个迁移中。解决方案是在表创建后创建一个单独的迁移来添加约束。
在不使用 Laravel 的情况下使用
在不使用整个 Laravel 框架的情况下使用此驱动程序是完全可能的。Laravel 的数据库组件在其自己的 composer 包 illuminate/database
中打包得很好。只需将此包要求到您的项目中,您就可以开始了。
composer require illuminate/database
composer require hackerboylaravel-cockroachdb
要设置数据库连接,您需要创建一个新的 Capsule
并将其注册。
<?php use Illuminate\Database\Connection; use HackerBoy\LaravelCockroachDB\CockroachConnector; use HackerBoy\LaravelCockroachDB\CockroachConnection; use Illuminate\Database\Capsule\Manager as DB; require 'vendor/autoload.php'; $config = [ // Your configuration goes here ]; // Add connection resolver for the cockroach driver Connection::resolverFor('cockroach', function ($connection, $database, $prefix, $config) { $connection = (new CockroachConnector)->connect($config); return new CockroachConnection($connection, $database, $prefix, $config); }); // Create a new DatabaseManager instance $db = new DB; // Add a connection using your configuration $db->addConnection($config); // Register the DatabaseManager instance as global $db->setAsGlobal();
如果您选择使用 Eloquent(Laravel 的 ORM),也是可能的。只需添加
$db->bootEloquent();
到此为止,您可以使用全局注册的 DatabaseManager 如此使用
<?php use Illuminate\Database\Capsule\Manager as DB; require 'vendor/autoload.php'; // Fetch all users from the users table $users = DB::table('users')->get();