/
Shamaeva2
/
coursework.local
Обзор
Документация
Войти
/
Shamaeva2
/
coursework.local
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/Models/User.php
159 строк
4 KB
Шамаева Виктория Сергеевна
добавлена связь меджу группой и классным руководителем
25 июн 2026, 14:47
25 июн 2026, 14:47
d1e0800
Код
Авторство
О чём код?
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Relations\HasMany; class User extends Authenticatable { /** @use HasFactory<\Database\Factories\UserFactory> */ use HasFactory, Notifiable; /** * The attributes that are mass assignable. * * @var list<string> */ protected $fillable = [ 'first_name', 'last_name', 'middle_name', 'email', 'tel', 'password', 'role', 'login', 'avatar_path', ]; /** * Get the attributes that should be cast. * * @return array<string, string> */ protected function casts(): array { return [ // Автоматическое хэширование пароля. 'password' => 'hashed', ]; } /** * The accessors to append to the model's array form. * * @var array */ protected $appends = ['full_name', 'role_text', 'avatar_full_path']; /** * Полное имя пользователя (ФИО). */ protected function fullName(): Attribute { // Создание атрибута. return Attribute::make( get: function () { // Конкатенация фамилии и имени. $full_name = $this->last_name . ' ' . $this->first_name; // Конкатенация отчества, если оно имеется. if ($this->middle_name) { $full_name .= ' ' . $this->middle_name; } return $full_name; }, ); } /** * Отображение названия текста роли пользователя. */ protected function roleText(): Attribute { return Attribute::make( get: function () { switch ($this->role) { case 'student': return 'Студент'; case 'employee': return 'Сотрудник'; case 'classroom_teacher': return 'Классный руководитель'; case 'admin': return 'Администратор'; default: return 'Роль отсутствует'; } }, ); } /** * Отображение названия текста роли пользователя. */ protected function avatarFullPath(): Attribute { return Attribute::make( get: fn(?string $value, array $attributes) => $attributes['avatar_path'] ? "/storage/{$attributes['avatar_path']}" : '/images/user.png', ); } /** * Студент который принадлежит пользователю. */ public function student(): HasOne { return $this->hasOne(Student::class); } /** * Группы класного классного руководителя. */ public function studyGroups(): HasMany { return $this->hasMany(StudyGroup::class); } /** * Scope для получения пользователей с ролью студента. */ public function scopeStudents(Builder $query): Builder { return $query->where('role', 'student'); } /** * Scope для получения пользователей с ролью сотрудника. */ public function scopeEmployees(Builder $query): Builder { return $query->where('role', 'employee'); } /** * Scope для получения пользователей с ролью классного руководителя. */ public function scopeClassroomTeachers(Builder $query): Builder { return $query->where('role', 'classroom_teacher'); } /** * Scope для получения пользователей с ролью администратора. */ public function scopeAdmins(Builder $query): Builder { return $query->where('role', 'admin'); } }