甜曼CC / mysql-trigger-for-laravel-migration
一个用于将数据库触发器添加到Laravel迁移的包
Requires
- php: ^7.2
- laravel/framework: >=6.0.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-07 18:18:22 UTC
README
Laravel数据库触发器提供了一种向Laravel迁移添加数据库触发器的方法,就像添加数据库表一样。触发器是与表关联的命名数据库对象,当表发生特定事件时,它会激活。有关触发器的更多信息,请参阅这里。
安装
Laravel数据库触发器需要至少PHP 7.2。这个特定版本至少支持Laravel v6.0。该包目前仅支持MySQL。
要获取最新版本,请使用Composer安装该包。
$ composer require sweetmancc/mysql-trigger-for-laravel-migration
安装后,如果您不使用自动包发现,则需要将Sweetmancc\DatabaseTrigger\TriggerServiceProvider
服务提供者注册到您的config/app.php
中。
使用
使用make:trigger
artisan命令创建触发器迁移文件。该命令需要触发器的名称、事件对象表名称、动作时间和激活触发器的事件。
$ php artisan make:trigger after_users_posts_insert
事件对象表
事件对象表是触发器关联的表名称。
动作时间
触发器的激活时间。可能的值是after
和before
。
after
- 在事件对象表上的更改完成后处理动作。
before
- 在事件对象表上的更改之前处理动作。
事件
激活触发器的事件。触发器事件可以是insert
、update
和delete
。
insert
- 在事件对象表上执行插入操作时激活触发器。
update
- 在事件对象表上执行更新操作时激活触发器。
delete
- 在事件对象表上执行删除操作时激活触发器。
以下触发器迁移文件将生成一个名为after_users_posts_insert
的触发器,事件对象表名称为user_posts
,动作时间为after
,事件为insert
。
use Illuminate\Database\Migrations\Migration; use Sweetmancc\DatabaseTrigger\TriggerFacade as Schema; class CreateAfterUsersUpdateTrigger extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('after_users_posts_insert') ->on('user_posts') ->statement(function() { return '//You logic, Don't forget ";" '; }) ->after() ->update(); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users.after_users_posts_insert'); } }
从statement
方法的闭包中返回触发语句。
以下是一个示例触发器迁移,用于在更新用户行后向users_audit
表插入数据。
... /** * Run the migrations. * * @return void */ public function up() { Schema::create('after_user_posts_insert') ->on('user_posts') ->statement(function() { //It means that when insert an row into user_posts table It will inrease 1 to user_profiles table where row record user_id same as NEW insert to user_posts table user_id field. return 'UPDATE user_profiles SET postCount = postCount + 1 WHERE id = NEW.user_id;'; }) ->after() ->update(); } ...
更新数据库迁移
php artisan migrate
我的MySQL数据库表 user_posts
和 user_profiles
CREATE TABLE `user_posts` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `user_id` bigint(20) unsigned NOT NULL, `text` text COLLATE utf8mb4_unicode_ci, PRIMARY KEY (`id`), KEY `user_posts_user_id_foreign` (`user_id`), CONSTRAINT `user_posts_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `user_profiles` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `user_id` bigint(20) unsigned NOT NULL, `postCount` int(11) NOT NULL DEFAULT '0', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `user_profiles_user_id_unique` (`user_id`), CONSTRAINT `user_profiles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
测试
使用以下命令运行测试
$ composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全
如果您在此包中发现安全漏洞,请将电子邮件发送至Andy Q:sweetmancc@gmail.com。所有安全漏洞都将得到及时处理。
许可协议
Laravel 数据库触发器遵循 MIT 许可证 (MIT)。