如何使用Laravel over Model创建新的空数据库

时间:2016-04-28 12:22:29

标签: php database laravel migration

有没有办法用Laravel CodeBehind创建新数据库?我的意思是,我无法使用php artisan或类似的东西。仅仅因为我想为每个注册用户创建一个数据库。之后我可以使用migration。 我正在使用Laravel 5.2。 感谢您的支持。

5 个答案:

答案 0 :(得分:1)

好吧,您可以为每个bd执行数据库查询,而不是使用mysql或者您使用sgbd database create命令,例如;

  DB::getConnection()->statement('CREATE DATABASE :schema', array('schema' => "dasdsdasdsadsadsa"))

它可能适用于你想要的东西。

答案 1 :(得分:0)

你可以run artisan commands from code

Artisan::call('migrate');

要运行composer命令(您需要它来注册迁移),请使用php shell_exec

shell_exec('composer dumpauto');

答案 2 :(得分:0)

您可以像这样使用DB facade创建数据库(前提是sql用户有权这样做):

DB::statement('CREATE DATABASE myNewDB');

但我建议你重新考虑你的数据结构 - 为每个用户建立一个单独的数据库很可能不是解决你遇到的任何问题的正确解决方案,并且可能产生比解决方案更多的问题。

答案 3 :(得分:0)

您可以通过传递dbname(如此

)从控制器创建任意数量的数据库
public function index() {
    $userName = 'bigboytr';  // Your Database name to be created
    DB::statement("CREATE DATABASE $userName");
}

警告:

您不需要为每个用户创建一个数据库,因为它会使系统变得非常复杂。例如,如果在某些情况下您有数千名用户,那么将用户的信息移动到注册用户的“通用”数据库将非常困难

推荐:

我建议您为未注册用户创建一个新表,以便您可以将它们移动到注册用户的表中,这样可以简化您的流程。

提示:

您可以比较数据库引擎,并选择最适合您的匹配项,例如this

答案 4 :(得分:0)

为此,您可以创建 Artisan Command

步骤:1创建命令

php artisan make:command CreateDatabaseCommand

步骤:2在app / Console / Kernel.php中注册命令

protected $commands = [
    CreateDatabaseCommand::class
];

步骤:3在您的CreateDatabaseCommand.php文件中写入逻辑

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());
     }
   }

现在您可以像这样用现成的 Artisan命令调用

php artisan make:database {database-name} {connection-name}

查看我的样本

enter image description here