【问题标题】:how to manage database in laravellaravel如何管理数据库
【发布时间】:2019-01-30 04:43:45
【问题描述】:

我想使用多个数据库,我有 1db/user 和 1 个主数据库,已经在配置文件中设置了主数据库但是如何管理用户数据库(db name = {user_id} _db)。提前致谢

这是我的配置代码

'main' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],

【问题讨论】:

  • 每次新用户注册我都在创建新数据库
  • 对于所有用户会有不同的数据库?
  • 1 个用于身份验证和设置的主数据库和 1 个用于普通用户的数据库
  • 为每个用户创建数据库是没有用的,即使您这样做是为了安全或任何其他目的。有用的 SO 链接 stackoverflow.com/questions/16721772/… 你的问题已经在这里得到回答 stackoverflow.com/questions/31847054/…
  • 这没用,我有 10000+ 订单/分钟,所有用户都有自己的定制产品

标签: database laravel multi-database


【解决方案1】:

您可以对多个数据库使用以下配置。

<?php
return array(

    'default' => 'mysql',

    'connections' => array(

        # primary 
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'ip1',
            'database'  => 'db1',
            'username'  => 'user',
            'password'  => 'pwd'
            'charset'   => 'utf8',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix'    => '',
        ),

        # secondary db connection
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => 'dbip2',
            'database'  => 'db2',
            'username'  => 'user',
            'password'  => 'pwd'
            'charset'   => 'utf8',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix'    => '',
            'strict' => true,
            'engine' => null
        ),
        'sqlite' => array(
            'driver'   => 'sqlite',
            'database' => __DIR__.'/../database/db.sqlite',
            'prefix'   => '',
        ),
    ),
);

然后就可以使用connection()方法了:

$connection = ‘mysql2’;

Schema::connection($connection)->create(function(Blueprint $table) {

//

});

【讨论】:

  • 好的,我找到了解决方案,只需使用 user_id 作为前缀并创建动态连接,它工作得很好。
【解决方案2】:

为每个用户创建数据库是没有用的,即使您这样做是为了安全或任何其他目的。有用的 SO 链接MySQL performance: multiple tables vs. index on single table and partitions

您的问题(连接到 Laravel 中的多个数据库)已在此处得到解答。 How to use multiple database in Laravel

更新

我猜,您想即时创建新数据库并连接到它们(不使用 .env 配置)。尝试连接到新数据库时,创建动态连接而不是指定“连接名称”。然后,使用Config::set,您可以创建新的临时连接,然后将DB::connection 与您刚刚创建的临时名称一起使用。阅读更多https://lukevers.com/2015/03/25/on-the-fly-database-connections-with-laravel-5

【讨论】:

  • stackoverflow.com/questions/31847054/… 这不是我要找的,在这个回答中他使用了已经定义但我没有任何连接的多个数据库连接,或者可以说无法在配置中定义连接文件
猜你喜欢
  • 1970-01-01
  • 2020-10-06
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 2018-01-09
  • 2011-07-16
相关资源
最近更新 更多