vito/app/Models/Project.php
2025-03-12 13:31:10 +01:00

98 lines
2.3 KiB
PHP

<?php
namespace App\Models;
use App\Traits\HasTimezoneTimestamps;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
/**
* @property int $id
* @property int $user_id
* @property string $name
* @property Carbon $created_at
* @property Carbon $updated_at
* @property User $user
* @property Collection<int, Server> $servers
* @property Collection<int, User> $users
* @property Collection<int, NotificationChannel> $notificationChannels
* @property Collection<int, SourceControl> $sourceControls
*/
class Project extends Model
{
/** @use HasFactory<\Database\Factories\ProjectFactory> */
use HasFactory;
use HasTimezoneTimestamps;
protected $fillable = [
'user_id',
'name',
];
public static function boot(): void
{
parent::boot();
static::deleting(function (Project $project): void {
$project->servers()->each(function ($server): void {
/** @var Server $server */
$server->delete();
});
});
}
/**
* @return BelongsTo<User, covariant $this>
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* @return HasMany<Server, covariant $this>
*/
public function servers(): HasMany
{
return $this->hasMany(Server::class);
}
/**
* @return HasMany<NotificationChannel, covariant $this>
*/
public function notificationChannels(): HasMany
{
return $this->hasMany(NotificationChannel::class);
}
/**
* @return BelongsToMany<User, covariant $this>
*/
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class, 'user_project')->withTimestamps();
}
/**
* @return HasMany<SourceControl, covariant $this>
*/
public function sourceControls(): HasMany
{
return $this->hasMany(SourceControl::class);
}
/**
* @return HasMany<Tag, covariant $this>
*/
public function tags(): HasMany
{
return $this->hasMany(Tag::class);
}
}