b2in/packages/flux-cms/core/database/seeders-reference/CmsSearchIndexSeeder.php
2026-04-10 17:18:17 +02:00

74 lines
2.5 KiB
PHP

<?php
namespace Database\Seeders;
use FluxCms\Core\Models\CmsSearchIndex;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;
class CmsSearchIndexSeeder extends Seeder
{
public function run(): void
{
$deItems = $this->loadItems('de');
$enItems = $this->loadItems('en');
$deById = collect($deItems)->keyBy('id');
$enById = collect($enItems)->keyBy('id');
$allIds = $deById->keys()->merge($enById->keys())->unique();
$order = 0;
foreach ($allIds as $itemId) {
$de = $deById->get($itemId, []);
$en = $enById->get($itemId, []);
$source = ! empty($de) ? $de : $en;
CmsSearchIndex::updateOrCreate(
['item_id' => $itemId],
[
'route' => $source['route'] ?? '',
'route_params' => $source['route_params'] ?? [],
'category' => [
'de' => $de['category'] ?? ($en['category'] ?? ''),
'en' => $en['category'] ?? ($de['category'] ?? ''),
],
'title_key' => $source['title_key'] ?? null,
'title_fallback' => [
'de' => $de['title_fallback'] ?? null,
'en' => $en['title_fallback'] ?? null,
],
'description_key' => $source['description_key'] ?? null,
'description_fallback_key' => $source['description_fallback_key'] ?? null,
'description_fallback_text' => [
'de' => $de['description_fallback_text'] ?? null,
'en' => $en['description_fallback_text'] ?? null,
],
'keywords' => [
'de' => $de['keywords'] ?? [],
'en' => $en['keywords'] ?? [],
],
'is_published' => true,
'order' => $order++,
]
);
}
$this->command->info('CmsSearchIndexSeeder: '.$allIds->count().' Eintraege erstellt/aktualisiert.');
}
/**
* @return array<int, array<string, mixed>>
*/
protected function loadItems(string $locale): array
{
$path = lang_path("{$locale}/search_index.php");
if (! File::exists($path)) {
return [];
}
$config = require $path;
return $config['items'] ?? [];
}
}