taran/cockroachdb-lumen

CockroachDB 8的驱动程序

0.0.9-alpha 2021-02-24 06:19 UTC

README

从nbj/cockroachdb-laravel分叉的CockroachDB 8数据库驱动程序

用法

步骤 1:通过Composer安装

composer require taran/cockroachdb-lumen

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

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

Taran\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处理模式所做的更改与Postgres默认设置略有不同。因此,我们不需要使用

'schema' => 'DATABASE-NAME'

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

'schema' => 'public'

然后,所有内容都应按预期工作。

已知问题

  • 约束不能在创建表的迁移中与创建表同时存在。解决方法是,在表创建后,将其约束添加到自己的迁移中。

无Lumen的用法

完全可以使用此驱动程序而不使用整个Lumen框架。Laravel的数据库组件已在名为 illuminate/database 的composer包中优雅地打包。只需将此包添加到您的项目中,您就可以开始使用了。

composer require illuminate/database
composer require taran/cockroachdb-lumen

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

<?php

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