我正在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 但没有运气
请帮忙解决。
答案 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);
}
要注意的一件事是,如果您与其他连接存在关系,则在查询/构建器中使用whereHas
或has
将无效。因为laravel将无法在生成的查询中设置连接。