vito/app/Models/Database.php
Richard Anderson 5a12ed76bb
Database collations (#489)
* SyncDatabases

* Collation on Create inc WordPress

* Refactored Enum

* Resolve sync issue

* Fix for PostgreSQL

* pint

* reversed enum

* style adjustments

* add unit tests

* style

* fix tests

* more tests

---------

Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com>
Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-03-02 17:18:27 +01:00

72 lines
1.8 KiB
PHP
Executable File

<?php
namespace App\Models;
use App\Enums\DatabaseStatus;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* @property int $server_id
* @property string $name
* @property string $collation
* @property string $charset
* @property string $status
* @property Server $server
* @property Backup[] $backups
* @property Carbon $deleted_at
*/
class Database extends AbstractModel
{
use HasFactory;
use SoftDeletes;
protected $fillable = [
'server_id',
'name',
'collation',
'charset',
'status',
];
protected $casts = [
'server_id' => 'integer',
];
public static function boot(): void
{
parent::boot();
static::deleting(function (Database $database) {
$database->server->databaseUsers()->each(function (DatabaseUser $user) use ($database) {
$databases = $user->databases;
if ($databases && in_array($database->name, $databases)) {
unset($databases[array_search($database->name, $databases)]);
$user->databases = $databases;
$user->save();
}
});
});
}
public static array $statusColors = [
DatabaseStatus::READY => 'success',
DatabaseStatus::CREATING => 'warning',
DatabaseStatus::DELETING => 'warning',
DatabaseStatus::FAILED => 'danger',
];
public function server(): BelongsTo
{
return $this->belongsTo(Server::class);
}
public function backups(): HasMany
{
return $this->hasMany(Backup::class)->where('type', 'database');
}
}