为不同的插入创建触发器

时间:2018-04-05 13:29:50

标签: mysql sql laravel eloquent

我有不同的表格

  1. 预订(ID,lesson_id,USER_ID)
  2. 讲座(ID,名称,日期,START_TIME,END_TIME,max_enrollments,入学)
  3. 许可证(USER_ID,membership_id,used_entries,valid_until,条目)
  4. 每次在预订中添加新记录时,如何创建一个递增enrollments(表课程)和entries表格的触发器 提前谢谢!

2 个答案:

答案 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.enrollmentsPermits.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(或者更好的是,Bookings列上的复合索引)),这些查询将会非常快。