Anladım . Benimki sadece kolaylık olsun diye bir şekilde 2 farklı üyelik tipi olması gerekiyor. Aslında bir profil tablosuna hasOne ile ilişki kurup user->profile->role şeklinde erişmek ile direk user tablosunda user -> role şeklinde erişme arasında pek bir fark yok gibi .
Ancak demek istediğinizi anladım , kabaca bir müşteri takip sistemi söz konusuysa customer diye ayrı bir tablo yada bir pazar yeri söz konusuysa magazalar diye ayrı bir tablo oluşturup , eloquent-relationships den projeye uygun olan bir ilişki türü ile user modeliyle ilişkilendirerek user->customer yada user->store şeklinde ilerlemek gerekiyo.
Enum konusuna dönersem ,herhangi bir yerde görmedim tamamen kendi uydurma çözümüm belki birisi hayır bu kullanım hatalı der ve düzeltebilirim diye paylaşıyorum .
ister ayrı bir profil tablosu oluşturarak ister direk user tablosunda kullanılsın yapı
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('role');
bu şekilde yani $table->string('role'); burda herhangi bir bağlayıcılık yok .
bağlayıcılık aşşağıda
enum UserRole:string
{
case ADMIN = 'admin';
case USER= 'user';
case EDITOR= 'editor';
}
bu 3 secenekten birinin girilmesini kontrol eden yer ise artık
Validator::make($input, [
'name' => ['required', 'string', 'max:100'],
'role' => [new Enum(UserRole::class)],
buda şu demek ilk kullanıcıya manuel olarak mysqlde admin değeri verip ve enum UserRole içinden
case ADMIN = 'admin'; değerini kaldırılırsa yani
enum UserRole:string
{
case USER= 'user';
case EDITOR= 'editor';
}
sadece user ve editor değerleri kalırsa admin değeri tahmin edilsede 'role' => [new Enum(UserRole::class)], bu validasyon sayesinde sadece bu iki değerden birisi girilebilir . sadece kullanıcı adminmi diye sorgularken Enum içindeki UserRole:: class kullanılarak sorgulanmaması gerekir