具有ORM(雄辩)连接多个数据库的Slim框架

具有ORM(雄辩)连接多个数据库的Slim框架,orm,eloquent,slim,multiple-databases,Orm,Eloquent,Slim,Multiple Databases,我正在使用Slim框架和雄辩的4.1.x作为项目的ORM,需要连接到多个数据库 我按照这个来设置ORM。但是,如何按照给定的教程连接到多个数据库 在我的模型中,我有不同的文件用于不同数据库中的不同表 与User.php文件类似,该文件具有以下内容: <?php namespace Service\Framework\Model; use Illuminate\Database\Eloquent\Model; class Users extends Model { protected

我正在使用Slim框架和雄辩的4.1.x作为项目的ORM,需要连接到多个数据库

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

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

与User.php文件类似,该文件具有以下内容:

<?php
namespace Service\Framework\Model;

use Illuminate\Database\Eloquent\Model;

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

首先,您应该设置多个连接。设置连接后,您可以指示模型使用带有
$connection
属性的特定连接

namespace Service\Framework\Model;

use Illuminate\Database\Eloquent\Model;

class Users extends Model {
  protected $connection = 'mysql2';
  protected $table = 'users';
}
在路由或控制器中,您可以使用
setConnection()
方法

$user = new User;
$user->setConnection('mysql2');
print_r($user->find(1));

首先,您应该设置多个连接。设置连接后,您可以指示模型使用带有
$connection
属性的特定连接

namespace Service\Framework\Model;

use Illuminate\Database\Eloquent\Model;

class Users extends Model {
  protected $connection = 'mysql2';
  protected $table = 'users';
}
在路由或控制器中,您可以使用
setConnection()
方法

$user = new User;
$user->setConnection('mysql2');
print_r($user->find(1));

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

$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;
};
并在模型文件中放入:

protected $connection = 'db_second';

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

$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;
};
并在模型文件中放入:

protected $connection = 'db_second';

谢谢你,迈克,不过有一个问题。如何使用我正在使用的代码设置多个连接?猜猜看?我已经用代码片段更新了我的问题。请提出建议。我并没有真正使用雄辩,但最有可能通过创建另一个$conn对象来查看代码,例如使用不同$设置的$conn2。然后调用类似$resolver->addConnection('mysql2',$conn2)的命令;迈克,是的,这解决了我的问题。虽然后来我不得不使用胶囊,但基本想法是一样的。谢谢迈克,尽管有一个问题。如何使用我正在使用的代码设置多个连接?猜猜看?我已经用代码片段更新了我的问题。请提出建议。我并没有真正使用雄辩,但最有可能通过创建另一个$conn对象来查看代码,例如使用不同$设置的$conn2。然后调用类似$resolver->addConnection('mysql2',$conn2)的命令;迈克,是的,这解决了我的问题。虽然后来我不得不使用胶囊,但基本想法是一样的。