簡體   English   中英

如何使用 Laravel over Model 創建新的空數據庫

[英]How to create new empty database with Laravel over Model

有沒有辦法用Laravel CodeBehind 創建新數據庫? 我的意思是,我不能使用php artisan或類似的東西。 只是因為我想為每個注冊用戶創建一個數據庫。 之后我可以使用migration 我正在使用Laravel 5.2 已經感謝您的支持。

為此,您可以創建一個Artisan 命令

步驟: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}

查看我的樣本

在此處輸入圖片說明

好吧,您可以為每個 bd 執行數據庫查詢,然后使用 mysql 或 sgbd 數據庫創建命令,例如;

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

它可能會與你想要的一起工作。

您可以 從代碼運行工匠命令

Artisan::call('migrate');

要運行 composer 命令(您需要它來注冊遷移),請使用 php shell_exec

shell_exec('composer dumpauto');

您可以像這樣使用 DB Facade 創建一個數據庫(前提是 sql 用戶有權這樣做):

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

但我會敦促您重新考慮您的數據結構 - 為每個用戶擁有一個單獨的數據庫很可能不是解決您遇到的任何問題的正確解決方案,並且可能會產生比解決問題更多的問題。

您可以通過像這樣傳遞 dbname 從控制器創建盡可能多的數據庫

public function index() {
    $userName = 'bigboytr';  // Your Database name to be created
    DB::statement("CREATE DATABASE $userName");
}

警告:

您不需要為每個用戶創建一個數據庫,因為這會使系統變得非常復雜。 例如,如果在某些情況下您有數千個用戶,那么將用戶信息移動到注冊用戶的“通用”數據庫將非常困難

推薦:

我建議您為未注冊用戶創建一個新表,以便您可以將它們移動到注冊用戶的表中,這將使您的過程變得容易。

提示:

您可以像這樣比較數據庫引擎並選擇最適合您的匹配項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM