52 lines
1.3 KiB
PHP
52 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\MemeMedia;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Str;
|
|
|
|
class PopulateMemeMediaSlugs extends Command
|
|
{
|
|
protected $signature = 'memes:populate-slugs';
|
|
|
|
protected $description = 'Populate slug field for existing MemeMedia records';
|
|
|
|
public function handle()
|
|
{
|
|
$this->info('Starting to populate MemeMedia slugs...');
|
|
|
|
$memes = MemeMedia::whereNull('slug')->get();
|
|
|
|
if ($memes->isEmpty()) {
|
|
$this->info('No memes found without slugs.');
|
|
|
|
return;
|
|
}
|
|
|
|
$this->info("Found {$memes->count()} memes without slugs.");
|
|
|
|
$bar = $this->output->createProgressBar($memes->count());
|
|
$bar->start();
|
|
|
|
foreach ($memes as $meme) {
|
|
$baseSlug = Str::slug($meme->name);
|
|
$slug = $baseSlug;
|
|
$counter = 1;
|
|
|
|
// Ensure slug is unique
|
|
while (MemeMedia::where('slug', $slug)->exists()) {
|
|
$slug = $baseSlug.'-'.$counter;
|
|
$counter++;
|
|
}
|
|
|
|
$meme->update(['slug' => $slug]);
|
|
$bar->advance();
|
|
}
|
|
|
|
$bar->finish();
|
|
$this->newLine();
|
|
$this->info('Successfully populated all MemeMedia slugs!');
|
|
}
|
|
}
|