为不同的插入创建触发器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为不同的插入创建触发器相关的知识,希望对你有一定的参考价值。

我有不同的表

  1. 预订(ID,lesson_id,USER_ID)
  2. 教训(ID,姓名,日期,START_TIME,END_TIME,max_enrollments,入学率)
  3. 许可证(USER_ID,membership_id,used_entries,valid_until,项)

如何在每次在预订中添加新记录时创建一个增加enrollments(表格课程)和表格的entries的触发器,提前感谢!

答案

你可以使用Observers

在qazxsw poi上注册您的观察者,然后使用以下代码创建一个观察者:

AppServiceProvider

通过在namespace AppObservers; use AppBooking; use AppLessons; use AppPermit; class BookObserver { /** * Listen to the Booking created event. * * @param AppBooking $books * @return void */ public function created(Booking $books) { Lessons::find($books->lesson_id)->increment('enrollments'); } } 上添加此行来注册AppProvidersAppServiceProvider中的观察者

boot

不要忘记给你的模特和观察者打电话:

Booking::observe(BookObserver::class);
另一答案

而不是那样做,我会在你需要数据时聚合。即,而不是管理use AppBooking; use AppObserversBookObserver; Lessons.enrollments的状态,而不是在需要时用查询计算它们:

Permits.entries

这可以让您了解用户和课程的预订

然后:

SELECT COUNT(*) FROM Bookings B WHERE B.user_id = ? and B.lession_id = ?

这可以为您提供用户的条目计数

这样,您就不必担心保持可以单独计算的最新值,这将更容易管理,因为您知道查询中包含最新的数字。

正确创建索引(在SELECT COUNT(*) FROM Permits P WHERE P.user_id = ?Permits.user_idBookings.user_id上(或者更好的是,两个Bookings.lesson_id列上的复合索引))并且这些查询将非常快。

以上是关于为不同的插入创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

片段创建的 Intent 不会触发 onNewIntent

将通知设置为在某个用户事件时触发

如何防止片段在活动重新创建时触发 onCreate onCreateView

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?

Android 使用两个不同的代码片段获取当前位置 NULL

代码适用于与单个 html 文件不同的堆栈片段