laravel 5.4动态数据库连接

时间:2017-03-23 11:52:28

标签: php mysql database laravel dynamic

我正在laravel建立入学门户,

我有超级管理员数据库,其中有一个100行的学校表, 学校桌子结构 1.id 2.school_name 3.database详细信息

我希望通过其ID来连接学校数据库及其数据库详细信息。

技术上 我将从网址传递学校ID 2.it将从学校表中选择该行 3.选择特定学校的数据库详细信息 4.将连接到学校数据库以供进一步使用。

我经历了https://laracasts.com/discuss/channels/tips/set-up-dynamic-database-connection-globally http://fideloper.com/laravel-multiple-database-connections 但没有运气

请帮忙解决。

2 个答案:

答案 0 :(得分:0)

实际上你不想要多个连接,而是改变现有的连接。

config(['database.school' => [
    'driver'   => 'mysql',
    'database' => $school->database,
    'username' => $school->username,
    'password' => $school->password
]]);

现在默认连接已更改。我想。

如果您不想更改现有连接,只需创建一个新的连接

$users = DB::connection('school')->select(...);

并像这样使用

const callback = (err, resp) => {
  if (err) {
    process.stdout.write(`${err}\n`);
  } else {

    const userPoolId = resp.UserPool.Id;

    // the lambdas must have a permission attached that allows them to interact
    // directly with cognito
    const generateLambdaPersmission = (userPoolName, lambdaName) => {
      return {
        Action: 'lambda:InvokeFunction',
        Principal: 'cognito-idp.amazonaws.com',
        SourceArn: `arn:aws:cognito-idp:${awsConfig.REGION}:${awsConfig.AWS_ACCOUNT_ID}:userpool/${userPoolId}`,
        FunctionName: getArn(lambdaName),
        StatementId: `${stage}1`
      };
    };

    lambda.addPermission(generateLambdaPersmission(userPoolId, 'preSignUp'), (err, resp) => {
      if (err) {
        process.stdout.write(`error attaching permission to lambda: ${err}`);
      }
    });

    lambda.addPermission(generateLambdaPersmission(userPoolId, 'postConfirmation'), (err, resp) => {
      if (err) {
        process.stdout.write(`error attaching permission to lambda: ${err}`);
      }
    });

    process.stdout.write(userPoolId);
  }
};

答案 1 :(得分:0)

您是否尝试在学校模式中设置连接?即使你有不同联系的关系,Laravel也会照顾其余的事情。

在您的School模型中,我将覆盖构造函数,如下所示:

public function __construct(array $attributes = [])
{
    $this->setConnection(env('DB_SCHOOL_CONNECTION'));

    parent::__construct($attributes);
}

要注意的一件事是,如果您与其他连接存在关系,则在查询/构建器中使用whereHashas将无效。因为laravel将无法在生成的查询中设置连接。