为不同的插入创建触发器

问题描述 投票:0回答:2

我有不同的表

  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的触发器,提前感谢!

mysql sql laravel eloquent
2个回答
1
投票

你可以使用Observers

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

AppServiceProvider

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

boot

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

Booking::observe(BookObserver::class);

1
投票

而不是那样做,我会在你需要数据时聚合。即,而不是管理use App\Booking; use App\Observers\BookObserver; 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列上的复合索引))并且这些查询将非常快。

© www.soinside.com 2019 - 2024. All rights reserved.