envor/laravel-schema-macros

为Laravel的schema构建器提供一些有用的(数据库级别)宏。需要Laravel 11。

v1.1.6 2024-07-30 17:00 UTC

This package is auto-updated.

Last update: 2024-09-25 14:52:56 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

为Laravel的schema构建器提供一些有用的(数据库级别)宏。需要Laravel 11。

安装

您可以通过composer安装此包

composer require envor/laravel-schema-macros

用法

databaseExists()
createDatabaseIfNotExists()
trashDatabase()
emptyTrash()
copyTable()

#databaseExists()

databaseExists()方法确定指定的数据库是否存在

use Illuminate\Support\Facades\Schema;

$database = database_path('my-new-database.sqlite');

Schema::connection('sqlite')->databaseExists($database);

// false

touch($database);

Schema::connection('sqlite')->databaseExists($database);

// true

Schema::connection('mysql')->databaseExists('abc');

// false

Schema::connection('mysql')->createDatabase('abc');


Schema::connection('mysql')->databaseExists('abc');

// true

#createDatabaseIfNotExists()

createDatabaseIfNotExists()方法在数据库不存在的情况下创建它

use Illuminate\Support\Facades\Schema;

$default = database_path('database.sqlite');

touch($default);

Schema::connection('sqlite')->createDatabaseIfNotExists($default);

// false

Schema::connection('sqlite')->createDatabaseIfNotExists(database_path('another_database'));

// true


Schema::connection('mysql')->createDatabaseIfNotExists('brand_new_database');

// true

createDatabaseIfNotExists()方法还将递归创建sqlite数据库文件

$newFile = database_path('/new/directories/will/be/created/recursively/db.sqlite');

Schema::connection('sqlite')->createDatabaseIfNotExists($newFile);

// true

#trashDatabase()

trashDatabase()方法将数据库移动到trash并对其进行时间戳

提示

默认情况下,SQLite数据库会被移动到本地存储磁盘上的.trash目录。
您可以选择性地将另一个存储磁盘的名称作为第二个参数传递。

$database = database_path('database.sqlite');

Schema::connection('sqlite')->trashDatabase($database);

// /home/forge/mysite.com/storage/app/.trash/2024-02-04_06-29-11_database.sqlite

Schema::connection('mariadb')->trashDatabase('schema_demo');

// trashed_2024-02-04_06-44-42_schema_demo

#emptyTrash()

emptyTrash()方法将擦除所有从当前连接可到达的已删除数据库

提示

要永久删除晚于给定年龄的数据库并保留较新的数据库,
您可以将您想保留的数据库的最大年龄(以天为单位)传递。

$database = database_path('database.sqlite');

Schema::connection('sqlite')->trashDatabase($database);

// /home/forge/mysite.com/storage/app/.trash/2024-02-04_06-29-11_database.sqlite

Schema::connection('sqlite')->emptyTrash();

// 1

Schema::connection('mysql')->trashDatabase('schema_demo');

// trashed_2024-02-04_06-44-42_schema_demo

Schema::connection('mysql')->emptyTrash();

// 1

#copyTable()

copyTable()方法将复制指定的表

$database = database_path('database.sqlite');

Schema::connection('sqlite')->copyTable('users');

// users_copy

Schema::connection('sqlite')->copyTable('users', 'users_snapshot_1');

// users_snapshot_1

测试

重要

测试使用spatie/docker针对各种数据库服务器进行测试。
本地运行测试需要Docker!

composer test

变更日志

请参阅CHANGELOG获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING获取详细信息。

安全漏洞

请查看我们的安全策略了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。