带有 ORM (Eloquent) 的 Slim 框架连接多个数据库

Ane*_*yay 1 orm multiple-databases slim eloquent

我使用 Slim Framework 和 Eloquent 4.1.x 作为项目的 ORM,需要连接到多个数据库。

我按照此链接设置 ORM。但是如何按照给定的教程连接到多个数据库?

在我的模型中,我有不同的文件用于不同数据库中的不同表。

像 User.php 文件有以下内容,

<?php
namespace Service\Framework\Model;

use Illuminate\Database\Eloquent\Model;

class Users extends Model {
  protected $table = 'users';
}
Run Code Online (Sandbox Code Playgroud)

该类使用 db_2 数据库中的 users 表。我想在此类中的一个方法中从默认数据库 db_1 切换。喜欢,

<?php

namespace Service\Framework\Model;

use Illuminate\Database\Eloquent\Model;

class Users extends Model {
  protected $table = 'users';

  public function getUsers() {
    // Switch the database to db_2
    $users = self::all();
    // Again switch back to default database db_1
    return $users;
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?请帮我一些建议。

PS:我这里没有使用 Capsule。

编辑 #1 所以我用来设置单个连接的代码如下,

$settings = array(
      'driver' => 'mysql',
      'host' => 'localhost',
      'database' => 'db_1',
      'username' => 'dbuser',
      'password' => 'password',
      'charset'  => 'utf8',
      'collation' => 'utf8_general_ci',
      'prefix' => ''
    );

    // Bootstrap Eloquent ORM
    $container = new Container();
    $connFactory = new ConnectionFactory($container);
    $conn = $connFactory->make($settings);
    $resolver = new ConnectionResolver();
    $resolver->addConnection('default', $conn);
    $resolver->setDefaultConnection('default');
    Model::setConnectionResolver($resolver);
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用以下简化代码连接到多个数据库:

$app = new \Slim\App([
    'db' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'products',
        'username'  => 'user',
        'password'  => 'pass',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ],
    'db_second' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'second',
        'username'  => 'user',
        'password'  => 'pass',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ],
]);

$container = $app->getContainer();

// connect to db with Illuminate larvel
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($container['settings']['db']);
$capsule->addConnection($container['settings']['db_second'], 'db_second');
$capsule->setAsGlobal();
$capsule->bootEloquent();
/// END connect to db

// to accsess the $capsule with our container from our controllers
$container['db'] = function($container) use ($capsule){
    return $capsule;
};
Run Code Online (Sandbox Code Playgroud)

并在模型文件中放置:

protected $connection = 'db_second';
Run Code Online (Sandbox Code Playgroud)