46 خطوط
1.2 KiB
PHP
46 خطوط
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
|
|
class Department extends Model
|
|
{
|
|
protected $fillable = ['name', 'description', 'type', 'parent_id', 'manager_id', 'manager_changed_at', 'is_active', 'sort_order'];
|
|
|
|
protected $casts = [
|
|
'is_active' => 'boolean',
|
|
'manager_changed_at' => 'datetime',
|
|
];
|
|
|
|
public function parent(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Department::class, 'parent_id');
|
|
}
|
|
|
|
public function children(): HasMany
|
|
{
|
|
return $this->hasMany(Department::class, 'parent_id')->orderBy('sort_order');
|
|
}
|
|
|
|
public function manager(): BelongsTo
|
|
{
|
|
return $this->belongsTo(User::class, 'manager_id');
|
|
}
|
|
|
|
public function users(): HasMany
|
|
{
|
|
return $this->hasMany(User::class, 'department_id');
|
|
}
|
|
|
|
public function members(): BelongsToMany
|
|
{
|
|
return $this->belongsToMany(User::class, 'department_user')
|
|
->withPivot(['role_in_team', 'is_primary', 'joined_at'])
|
|
->withTimestamps();
|
|
}
|
|
}
|