我的代码,使用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;
');
}
您无需为模型事件创建迁移。 Laravel雄辩有多个事件,如retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored
,你可以轻松使用它们。
首先,您应该像这样为您的模型创建Observer
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 documentation。
试试这个:请检查你的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');
例如,请检查此链接:
[https://itsolutionstuff.com/post/how-to-add-mysql-trigger-from-migrations-in-laravel-5example.html]1
我希望能帮助你