如何在 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;
}
}
}
所以我用
创建了一个专栏$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;
}
}
}