如何在 laravel 迁移中使用条件设置默认值?

How do i set default value with conditional in laravel migrate?

所以我用

创建了一个专栏
$table->enum('role', ['admin', 'customer'])->default('customer');

我想要 table 和

if email with @domain.com then assign into role admin 
else go to customer.

有没有办法在迁移中做到这一点?还是我需要在模型中设置? 我是 php 和 Laravel 的初学者,所以请给我详细的指导。

我邀请你在你的 Eloquent 模型上创建一个观察者。

您可以在以下位置阅读文档:https://laravel.com/docs/9.x/eloquent#observers

记得创建一个 PHP 枚举来检查您的角色。这将使您能够更轻松地添加角色或在代码中进行额外检查,而无需使用魔法值:

<?php
enum Role : string
{
    case ADMIN = 'admin';
    case CUSTOMER = 'customer';
}

creating 事件似乎是最合适的,因为它会在插入期间被观察到:

<?php
 
namespace App\Observers;
 
use App\Models\User;
 
class UserObserver
{
    /**
     * Handle the User "creating" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function creating(User $user)
    {
        // Your logic here
        if(str_ends_with($user->email, '@domain.com')) {
            $user->role = Role::ADMIN->value;
        } else {
            $user->role = Role::CUSTOMER->value;
        }
    }
}