为不同的插入创建触发器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为不同的插入创建触发器相关的知识,希望对你有一定的参考价值。
我有不同的表
- 预订(ID,lesson_id,USER_ID)
- 教训(ID,姓名,日期,START_TIME,END_TIME,max_enrollments,入学率)
- 许可证(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_id
和Bookings.user_id
上(或者更好的是,两个Bookings.lesson_id
列上的复合索引))并且这些查询将非常快。
以上是关于为不同的插入创建触发器的主要内容,如果未能解决你的问题,请参考以下文章
如何防止片段在活动重新创建时触发 onCreate onCreateView
在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?