有没有办法使用Laravel CodeBehind创建新的数据库?我的意思是,我不能使用php artisan或类似的工具。只因为我想为每个注册用户创建一个数据库。之后我可以使用migration。
我正在使用Laravel 5.2。
谢谢您的支持。
有没有办法使用Laravel CodeBehind创建新的数据库?我的意思是,我不能使用php artisan或类似的工具。只因为我想为每个注册用户创建一个数据库。之后我可以使用migration。
我正在使用Laravel 5.2。
谢谢您的支持。
public function index() {
$userName = 'bigboytr'; // Your Database name to be created
DB::statement("CREATE DATABASE $userName");
}
警告:
您不需要为每个用户创建一个数据库,因为这会使系统变得非常复杂。例如,如果您有数千名用户,在某些情况下,将用户信息移动到已注册用户的“通用”数据库中将非常困难。
建议:
我建议您为未注册用户创建一个新表,以便您可以将它们移动到已注册用户的表中,这将使您的过程更加容易。
提示:
您可以比较数据库引擎并选择最适合您的匹配,例如此链接
步骤1:创建命令
php artisan make:command CreateDatabaseCommand
protected $commands = [
CreateDatabaseCommand::class
];
protected $signature = 'make:database {dbname} {connection?}';
public function handle()
{
try{
$dbname = $this->argument('dbname');
$connection = $this->hasArgument('connection') && $this->argument('connection') ? $this->argument('connection'): DB::connection()->getPDO()->getAttribute(PDO::ATTR_DRIVER_NAME);
$hasDb = DB::connection($connection)->select("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = "."'".$dbname."'");
if(empty($hasDb)) {
DB::connection($connection)->select('CREATE DATABASE '. $dbname);
$this->info("Database '$dbname' created for '$connection' connection");
}
else {
$this->info("Database $dbname already exists for $connection connection");
}
}
catch (\Exception $e){
$this->error($e->getMessage());
}
}
php artisan make:database {database-name} {connection-name}
请查看我的示例
你可以为每个bd执行一次数据库查询,然后使用mysql或sgbd数据库创建命令。
DB::getConnection()->statement('CREATE DATABASE :schema', array('schema' => "dasdsdasdsadsadsa"))
你可以从代码中运行 artisan 命令。
Artisan::call('migrate');
要运行composer命令(您需要它来注册迁移),请使用php shell_exec
:
shell_exec('composer dumpauto');
DB::statement('CREATE DATABASE myNewDB');
但我建议您重新考虑数据结构 - 为每个用户单独创建一个数据库很可能不是解决您遇到的问题的正确方案,反而可能会带来更多问题。