Ich erstelle eine Schulplattform, wo Schüler, Lehrer, ... mit ihren Anmeldeinformationen anmelden können. Um doppelte Daten zu reduzieren, habe ich keine separate Tabelle namens students erstellt, stattdessen behalte ich alle Daten in der users-Tabelle.Make eloquent Modell für Untertyp
Um zu wissen, ob ein Benutzer ein Student mir eine Tabelle, die Einschreibungen genannt wird, in dieser Tabelle ein user_id
, schoolyear_id
und class_id
gespeichert sind.
Ich habe bereits ein Schülermodell erstellt, das auf die Benutzertabelle verweist, aber wie kann ich sicherstellen, dass dieses Modell nur Schüler durchlässt?
Student.php:
<?php
namespace App;
class Student extends User
{
protected $table= 'users';
public function enrollments(){
return $this->belongsToMany(Enrollment::class);
}
}
User.php:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Support\Facades\Auth;
class User extends Authenticatable
{
use Notifiable;
use HasRoles;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'first_name','last_name', 'password'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function profiles(){
return $this->hasOne(Profile::class);
}
}
Was ich will, erreichen, ist, dass, wenn ich rufe die Student::all();
Funktion, die ich alle bekommen die Benutzer, die an der Schule eingeschrieben sind, also Studenten.