我有不同的表格
每次在预订中添加新记录时,如何创建一个递增enrollments
(表课程)和entries
表格的触发器
提前谢谢!
答案 0 :(得分:1)
您可以使用 Observers
在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);
不要忘记给你的模特和观察者打电话:
use App\Booking;
use App\Observers\BookObserver;
答案 1 :(得分:1)
而不是这样做,我会在你需要数据时聚合。即,而不是管理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
(或者更好的是,Bookings
列上的复合索引)),这些查询将会非常快。