generateSearchDataTask->run($data['content']); } $department->update($data); // Обновляем SEO $this->updateSeo($department, $data); return $department; } private function updateSeo(Department $department, array $data): void { $title = $data['title'] ?? $department->title; $description = null; // Извлекаем description из первого paragraph блока if (!empty($data['content'])) { foreach ($data['content'] as $block) { if ($block['type'] === 'paragraph') { $description = strip_tags($block['data']['content']); break; } } } $seoData = [ 'title' => $title, 'description' => Str::limit(htmlspecialchars($description ?? '', ENT_QUOTES, 'UTF-8'), 160), ]; if ($department->seo) { $department->seo->update($seoData); } else { $department->seo()->create($seoData); } } }