torbenleuschner/cockroachdb-laravel

CockroachDB 驱动程序,适用于 Laravel 7.x

0.0.6-alpha 2019-01-22 10:01 UTC

README

Laravel 7 的 CockroachDB 数据库驱动程序

用法

步骤 1:通过 Composer 安装

composer require nbj/cockroachdb-laravel

步骤 2:添加服务提供者(在 Laravel 5.5 中自动完成)

打开 config/app.php 并将以下内容添加到 "providers" 数组中:

Nbj\Cockroach\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' => 'DATABASE-NAME',
    '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'),
],

确保将 hostportdatabaseusernamepasswordschema 更新为您的配置。注意,databaseschema 字段应相同。

安全模式

使用您的路径配置更新 sslcertsslkeysslrootcert

CockroachDB 2

当使用 PHP Postgres 驱动程序时,CockroachDB 对模式处理的更改稍有不同。因此,我们不需要使用

'schema' => 'DATABASE-NAME'

我们需要使用 Postgres 默认的 public,因此将您的配置更改为

'schema' => 'public'

然后一切都应该按预期工作。

已知问题

  • 约束不能与表的创建在同一个迁移中。解决方案是在表创建后为约束添加自己的迁移。

不使用 Laravel 的用法

在没有整个 Laravel 框架的情况下使用此驱动程序是完全可能的。Laravel 的数据库组件已整洁地打包在其自己的 composer 包 illuminate/database 中。只需将此包添加到您的项目中,即可开始使用。

composer require illuminate/database
composer require nbj/cockroachdb-laravel

要设置数据库连接,您需要创建一个新的 Capsule 并注册它。

<?php

use Illuminate\Database\Connection;
use Nbj\Cockroach\CockroachConnector;
use Nbj\Cockroach\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();