mysql - 如何在 laravel 中使用触发器?
问题描述
我的代码,使用 PHP artisan make:迁移 create_trigger 命令
public function up()
{
DB::unprepared('
CREATE TRIGGER roll_no BEFORE INSERT ON `students` FOR EACH ROW
BEGIN
SET @roll_num = IFNULL((substring((SELECT student_roll_no FROM students WHERE
class_code = NEW.class_code ORDER BY created_at DESC LIMIT 1),-2) + 1), `1`),
NEW.student_roll_no = CONCAT(
YEAR(CURRENT_DATE),
NEW.class_code,
IF (@roll_num < 10, CONCAT(`0`, @roll_num), @roll_num)
)
END;
');
}
解决方案
您无需为模型事件创建迁移。Laravel eloquent 有多个事件retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored
,你可以很容易地使用它们。
首先,您应该像这样为您的模型创建观察者
php artisan make:observer UserObserver --model=User
在 UserObserver 中,您可以收听您喜欢的任何事件,例如:
class UserObserver
{
/**
* Handle the User "created" event.
*
* @param \App\User $user
* @return void
*/
public function created(User $user)
{
//
}
/**
* Handle the User "updated" event.
*
* @param \App\User $user
* @return void
*/
public function updated(User $user)
{
//
}
}
之后,您应该将您的观察者注册为app/providers/AppServiceProvider
引导方法中的模型,例如:
public function boot()
{
User::observe(UserObserver::class);
}
更多细节请访问Laravel 文档。
推荐阅读
- javascript - 如何打印酶的浅包装内容
- gcc - 检测 Linux 内核函数
- javascript - 将日期时间字符串从 C# 转换为 Javascript 中的日期对象
- php - 如何获取查询中的所有值?
- javascript - 如何在 ASP.NET 中引用 ItemTemplate 中的文本框
- office365 - EWS 模拟可以与 Office365 电子邮件帐户服务提供商一起使用吗?
- ubuntu - sed 命令不更改文本
- excel - 下标超出范围错误 - saveas 方法
- python - 电报机器人上的连接超时
- javascript - 基本,通过从另一个选择中选择选择选项