【问题标题】:Laravel 5.2 use two different database connections simultaneously (sqlsrv + mysql)Laravel 5.2 同时使用两个不同的数据库连接(sqlsrv + mysql)
【发布时间】:2016-03-23 15:22:43
【问题描述】:

当我使用模型时,我想做这样的事情

class DB extends Model {

Protected $table = "mssql_table";
}

DB::useConnection("mssql")->All();

就配置而言,我发现我可以自己在 app/config/database.php 中添加它

所以我做到了。

所以现在我在我的连接中得到了这个:

'mssql' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_MSSQL_HOST', 'localhost'),
    'port' => env('DB_MSSQL_PORT', '3306'),
    'database' => env('DB_MSSQL_DATABASE', 'forge'),
    'username' => env('DB_MSSQL_USERNAME', 'forge'),
    'password' => env('DB_MSSQL_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

这是我的 .env 文件

DB_MSSQL_HOST=
DB_MSSQL_PORT=
DB_MSSQL_DATABASE=
DB_MSSQL_USERNAME=
DB_MSSQL_PASSWORD=

但是下一步是什么?谷歌并没有真正帮助我,在 laravel 4.* 你可以使用 db::connection();但它似乎不再起作用了

有什么想法吗?

【问题讨论】:

  • 提交了一个答案。让知道它是否适合您。如果答案对您有帮助,请务必点击接受和/或投票。否则,您将避免将来回答您的问题。

标签: php eloquent laravel-5.2 sqlsrv


【解决方案1】:

首先,您需要在配置中设置一个或多个数据库(请务必更改值,我只是复制和粘贴了很多内容):

'db1' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_MSSQL_HOST', 'localhost'),
    'port' => env('DB_MSSQL_PORT', '3306'),
    'database' => env('DB_MSSQL_DATABASE', 'forge'),
    'username' => env('DB_MSSQL_USERNAME', 'forge'),
    'password' => env('DB_MSSQL_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

'db2' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_MSSQL_HOST', 'localhost'),
    'port' => env('DB_MSSQL_PORT', '3306'),
    'database' => env('DB_MSSQL_DATABASE', 'forge'),
    'username' => env('DB_MSSQL_USERNAME', 'forge'),
    'password' => env('DB_MSSQL_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

当然,您需要为新添加的数据库创建一些迁移模式(您需要表等):

Schema::connection('db2')->create('table_name', function($table)
{
    $table->increments('id');
    ...
});

现在在您的 Eloquent 模型中,您可以像这样定义要使用的数据库:

class ModelName extends Eloquent {

    protected $connection = 'db2';

}

【讨论】:

    【解决方案2】:

    谢谢@Mike Barwick,我唯一想要的就是protected $connection = ""

    现在我可以一次查询 2 个数据库

    【讨论】:

    • 嗨,我是 Laravel 的新手。我有一个像你这样的案例,我必须从 sqlsrv 数据库中获取数据,而我使用的主数据库是 mysql。我应该将您的class DB extends Model {Protected $table = "mssql_table";} 更改为class ModelName extends Eloquent { protected $connection = 'db2';} 还是制作一个新模型?我应该创建 schema::connection 吗?
    • 我确实建立了一个新连接,如 OT 中所示,并添加了 $connection = "mssql";在那个特定的模型中。至于你是否应该使用 Schema::connection,这取决于你如何处理你的数据库结构。
    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2023-04-02
    • 2021-07-09
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多