82 lines
1.9 KiB
PHP
82 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
class Migration extends Model
|
|
{
|
|
/**
|
|
* The table associated with the model.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $table = 'public.migrations';
|
|
|
|
/**
|
|
* The connection name for the model.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $connection = 'pgsql';
|
|
|
|
/**
|
|
* Indicates if the model should be timestamped.
|
|
*
|
|
* @var bool
|
|
*/
|
|
public $timestamps = false;
|
|
|
|
/**
|
|
* The attributes that are mass assignable.
|
|
*
|
|
* @var array<string>
|
|
*/
|
|
protected $fillable = [
|
|
'migration',
|
|
'batch'
|
|
];
|
|
|
|
/**
|
|
* The attributes that should be cast.
|
|
*
|
|
* @var array<string, string>
|
|
*/
|
|
protected $casts = [
|
|
'batch' => 'integer',
|
|
];
|
|
|
|
/**
|
|
* Scope a query to search migrations.
|
|
*
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
* @param string|null $search
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
*/
|
|
public function scopeSearch(Builder $query, ?string $search): Builder
|
|
{
|
|
return $query->when($search, function ($query) use ($search) {
|
|
$search = '%' . strtolower($search) . '%';
|
|
return $query->where(function ($query) use ($search) {
|
|
$query->whereRaw('LOWER(public.migrations.migration) LIKE ?', [$search]);
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Format the migration name for display.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getFormattedNameAttribute(): string
|
|
{
|
|
// Convert migration filename to a more readable format
|
|
// Example: "2024_01_23_create_users_table" becomes "Create Users Table"
|
|
$name = str_replace('.php', '', $this->migration);
|
|
$name = preg_replace('/^\d{4}_\d{2}_\d{2}_/', '', $name);
|
|
$name = str_replace('_', ' ', $name);
|
|
return ucwords($name);
|
|
}
|
|
}
|