第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Laravel 6 中刪除數(shù)據(jù)庫?

如何在 Laravel 6 中刪除數(shù)據(jù)庫?

PHP
富國滬深 2022-07-16 18:52:46
所以我有一個問題,我有一個多租戶應用程序,我有一個系統(tǒng),我可以通過標準 CRUD 操作管理所有這些租戶。我希望能夠在租戶被刪除時刪除租戶數(shù)據(jù)庫,但我似乎在文檔中找不到任何關于能夠做到這一點的內容,我也無法在 API 文檔中找到一系列可以使用的方法。我在網(wǎng)上看到了以下內容(我能找到的唯一信息),但它已有 2 年歷史,但所有這些方法要么已被棄用,要么已在 Laravel 6 中移動。Schema::getConnection()->getDoctrineSchemaManager()->dropDatabase("`{$database_name}`");通過我自己的測試,運行以下命令確實有效。DB::statement('DROP DATABASE `foo`');我不能做的是將變量綁定到這個語句:DB::statement(DB::raw('DROP DATABASE ?', $database_name));我還想使用標準的 Laravel 查詢構建器,而不是自己清理信息。所以理想情況下,我希望能夠做這樣的事情:DatabaseManager::dropDatabase($database_name);或這個:$database = DatabaseManager::connect($database_name);$database->dropDatabase();我的猜測是我需要創(chuàng)建一個到MySQL的新連接,而我沒有直接連接到單個數(shù)據(jù)庫。然后執(zhí)行命令刪除數(shù)據(jù)庫,然后關閉連接。我將尋求自己構建這個,但只是想知道是否有人對這個有任何想法,或者是否以前做過這個?非常感謝所有幫助。
查看完整描述

4 回答

?
嚕嚕噠

TA貢獻1784條經(jīng)驗 獲得超7個贊

  1. 打開終端

2.復制/粘貼

 $ php artisan db:wipe

msg "成功刪除所有表。"


查看完整回答
反對 回復 2022-07-16
?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

調查結果

經(jīng)過一些研究和修補,我有兩個選擇。


1. DBAL 原則

我查看了 Doctrine DBAL 庫,并找到了我正在尋找的東西。管理命令執(zhí)行的庫。


它使用起來很簡單,正如上面問題中提到的,您需要執(zhí)行這段代碼:


Schema::getConnection()->getDoctrineSchemaManager()->dropDatabase("`{$database_name}`");

注意:為了做到這一點,您首先需要通過 composer 獲取庫:


composer require doctrine/dbal

深入研究了這個方法,它真的不值得額外的代碼,更不用說包含一個庫,因為它執(zhí)行的代碼如下[github]:


/**

 * Returns the SQL snippet to drop an existing database.

 *

 * @param string $database The name of the database that should be dropped.

 */

public function getDropDatabaseSQL(string $database) : string

{

    return 'DROP DATABASE ' . $database;

}

這與您在選項 2 中所做的完全相同。


2. Laravel DB::statement()

這種方法的作用完全相同,而且要簡單得多。所需要的只是以下代碼:


DB::statement("DROP DATABASE `{$database_name}`");

結論

TLDR;使用 Laravel 的 DB Facade 代替第三方解決方案來執(zhí)行此操作。它更清晰、更容易,并且使用更少的代碼。


現(xiàn)在我知道這樣做可能沒有太多理由,正如@Rwd 所指出的那樣,但我將尋求以某種方式使用它來自動化清除冗余數(shù)據(jù)庫的過程。我可能會構建某種形式的容器 DatabaseManager,其中每個管理器都將包含一個基于實例的數(shù)據(jù)庫信息版本,并包含一個處理數(shù)據(jù)庫刪除的方法。


感謝@Rwd 和@apokryfos 的討論。


查看完整回答
反對 回復 2022-07-16
?
白衣染霜花

TA貢獻1796條經(jīng)驗 獲得超10個贊

您可以創(chuàng)建一個 laravel 命令來刪除數(shù)據(jù)庫。例如:


php artisan db:drop $database_name


php 工匠制作:命令 dbDrop

在 commands/dbDrop.php 內:


protected $signature = 'db:drop {database_name}';


protected $description = 'Drop a database.';


public function __construct()

{

    parent::__construct();

}


public function handle()

{

    // Fetch the defined database name

    $db_type = \Config::get('database.default');

    $connection = \Config::get('database.connections.'.$db_type);

    $host = $connection['host'];

    $username = $connection['username'];

    $password = $connection['password'];

    $database = $connection['database'];

    $this->dropDB($host, $username, $password, $database);

}

  protected function dropDB($host, $username, $password, $database)

 {




        try

        {

            $db = $this->argument('database_name');

            // Create connection

            $conn = new \mysqli($host, $username, $password);

            $this->info(json_encode($conn));

            // return $conn;

            // Check connection

            if ($conn->connect_error) {

                die("Connection failed: " . $conn->connect_error);

            } 

            // Drop database

            $sql = "DROP DATABASE `$db`";

            if ($conn->query($sql) === TRUE) {

                echo "Sucessfully dropped database $db!";

            } else {

                echo "Error dropping database: " . $conn->error;

            }

            $conn->close();

        }

        catch(Exception $e){

            $this->info('');

            echo "Error dropping database: $db";

            $this->info('');

            echo json_encode($e->getMessage());

            $this->info('');

            $this->info('You can try the mysql shell.');

        }


    }


查看完整回答
反對 回復 2022-07-16
?
LEATH

TA貢獻1936條經(jīng)驗 獲得超7個贊

要從表中刪除記錄:

DB::table('table_name')->delete();

如果您希望截斷整個表,這將刪除所有行并將自動遞增 ID 重置為零,您可以使用 truncate 方法:

DB::table('table_name')->truncate();

或使用刪除表 Schema::dropIfExists('table_name');

刪除數(shù)據(jù)庫Schema::getConnection()->getDoctrineSchemaManager()->dropDatabase("database");


查看完整回答
反對 回復 2022-07-16
  • 4 回答
  • 0 關注
  • 161 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號