caneara / triggers
此包已废弃,不再维护。未建议替代包。
为Laravel添加数据库触发器支持的包
v1.0.1
2022-09-20 07:05 UTC
Requires
- php: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
README
此包允许在Laravel应用程序中使用数据库触发器。请注意,您选择的数据库必须支持触发器,以便该包能够工作。
安装
使用Composer引入包
composer require caneara/triggers
用法
只能将触发器添加到现有表中。因此,在您的迁移文件中创建触发器时,请确保在Schema::create
方法之后添加它们。
表
要创建一个触发器,只需在Triggers\Trigger
类上调用table
方法
use Triggers\Trigger; Trigger::table('posts');
键
默认情况下,该类将根据以下约定为触发器生成名称
trigger_{TABLE}_{TIME}_{EVENT}
然而,由于触发器名称必须在数据库中是唯一的,如果您要创建两个使用相同事件和时间的触发器(这些概念将在下一节中介绍),则会出现错误。
为了解决这个问题,该类提供了一个key
方法,允许您向触发器的名称中添加自己的自定义文本,从而确保触发器名称可以唯一
Trigger::table('posts')->key('custom');
当指定了键时,触发器名称将从以下约定派生
trigger_{TABLE}_{KEY}_{TIME}_{EVENT}
事件和时间
接下来,您需要指定触发器应该在INSERT
、UPDATE
或DELETE
事件时触发。您还需要指定触发器应该在事件发生后BEFORE
或AFTER
执行
Trigger::table('posts')->beforeDelete(); Trigger::table('posts')->beforeInsert(); Trigger::table('posts')->beforeUpdate(); Trigger::table('posts')->afterDelete(); Trigger::table('posts')->afterInsert(); Trigger::table('posts')->afterUpdate();
语句
最后一步是指定当触发器被触发时应执行的SQL语句。为此,向事件/时间方法提供一个Closure
。请注意,Closure
必须返回一个SQL string
,例如
Trigger::table('posts')->afterInsert(function() { return "UPDATE `users` SET `posts` = 1 WHERE `id` = NEW.user_id;"; });
示例
以下示例显示了创建一个posts
表并将其分配给触发器的迁移。
use Triggers\Trigger; class CreatePostsTable extends Migration { public function up() : void { Schema::create('posts', function(Blueprint $table) { $table->unsignedTinyInteger('id'); $table->string('title'); }); Trigger::table('posts')->key('count')->afterInsert(function() { return "UPDATE `users` SET `posts` = 1 WHERE `id` = NEW.user_id;"; }); } }
贡献
感谢您考虑为此项目做出贡献。您欢迎提交包含改进的PR,但如果它们本质上是重大的,请确保还包括测试或测试。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。