4 回答

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 的討論。

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.');
}
}
}

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");
- 4 回答
- 0 關注
- 161 瀏覽
添加回答
舉報