具有ORM(雄辩)连接多个数据库的Slim框架
我正在使用Slim框架和雄辩的4.1.x作为项目的ORM,需要连接到多个数据库 我按照这个来设置ORM。但是,如何按照给定的教程连接到多个数据库 在我的模型中,我有不同的文件用于不同数据库中的不同表 与User.php文件类似,该文件具有以下内容:具有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
<?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)的命令;迈克,是的,这解决了我的问题。虽然后来我不得不使用胶囊,但基本想法是一样的。