HAR*_*HNA 6 mysql database triggers laravel laravel-5.7
我的代码,使用 PHP artisan make:migration 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;
');
}
Run Code Online (Sandbox Code Playgroud)
hos*_*nz3 17
您不需要为模型事件创建迁移。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)
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
之后,您应该在app/providers/AppServiceProvider引导方法中注册您的观察者以进行建模,例如:
public function boot()
{
User::observe(UserObserver::class);
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请访问Laravel 文档。
试试这个:请检查你的 SQL 语法
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');
Run Code Online (Sandbox Code Playgroud)
例如,请检查此链接:
[https://itsolutionstuff.com/post/how-to-add-mysql-trigger-from-migrations-in-laravel-5example.html] 1
我希望能帮助你