Пошук пов'язаного контенту в Laravel часто вимагає написання кастомних запитів або покладається на збіг ключових слів, що не вловлює семантичні зв’язки. Laravel Related Content, створений Vladislav Stoitsov, використовує векторні ембеддинги та розширення PostgreSQL pgvector, щоб автоматично знаходити й пов'язувати контент різних типів моделей за значенням, а не за ключовими словами. Пакет на момент написання перебуває в бета-версії.
Пакет попередньо обчислює зв'язки під час збереження і зберігає їх у базі даних, тож отримання пов'язаного контенту — це звичайний запит до БД (~5ms) замість пошуку за схожістю в реальному часі при кожному завантаженні сторінки.
Пакет вимагає PostgreSQL із розширенням pgvector. Якщо ви ще не ввімкнули його, виконайте в базі:
CREATE EXTENSION IF NOT EXISTS vector;
Після встановлення пакета і прогону міграцій налаштуйте провайдера ембеддингів у .env. Для OpenAI:
RELATED_CONTENT_PROVIDER=openai
OPENAI_API_KEY=your-api-key
OPENAI_EMBEDDING_MODEL=text-embedding-3-small
OPENAI_EMBEDDING_DIMENSIONS=1536
Або для локального екземпляра Ollama:
RELATED_CONTENT_PROVIDER=ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_EMBEDDING_MODEL=nomic-embed-text
OLLAMA_EMBEDDING_DIMENSIONS=768
Додайте трейд HasRelatedContent до будь-якої моделі і вкажіть поля, з яких формувати ембеддинги:
class Article extends Model
{
use HasRelatedContent;
public function embeddableFields(): array
{
return ['title', 'excerpt', 'content'];
}
}
Коли модель зберігається, пакет генерує ембеддинг із зазначених полів і шукає пов'язаний контент серед усіх налаштованих моделей.
Отримати пов'язані моделі можна одним викликом:
// Get all related models
$related = $article->getRelatedModels();
// Limit the number of results
$related = $article->getRelatedModels(5);
// Get related models of a specific type
$events = $article->getRelatedOfType(Event::class);
Оскільки зв'язки попередньо обчислені, ці виклики — звичайні запити до БД без додаткових API-звернень.
Одна з помітних особливостей пакета — можливість пов'язувати контент між різними моделями. Зареєструйте моделі, що братимуть участь у міжмодельних зв'язках, у config/related-content.php, і пакет автоматично знайде зв'язки між ними. Наприклад, стаття про «Laravel testing» може показувати пов'язану конференцію або community link на ту саму тему.
'models' => [
\App\Models\Article::class,
\App\Models\Event::class,
\App\Models\CommunityLink::class,
],
Потім виконайте семантичний пошук по всіх налаштованих моделях — за змістом, а не за точними ключовими словами:
$service = app(RelatedContentService::class);
$results = $service->search('Laravel AI tools and best practices');
Це поверне відповідний контент з будь-якого зареєстрованого типу моделі на підставі семантичної схожості запиту та збережених ембеддингів.
Скористайтеся вбудованою Artisan-командою, щоб згенерувати ембеддинги для існуючих записів або перегенерувати їх після зміни полів:
# Process models that are missing embeddings
php artisan related-content:rebuild
# Process a specific model (missing only)
php artisan related-content:rebuild "App\Models\Article"
# Regenerate all embeddings
php artisan related-content:rebuild --force
# Process synchronously instead of queuing
php artisan related-content:rebuild --sync
Пакет також диспатчить подію RelatedContentSynced під час оновлення зв'язків, що дозволяє виконувати додаткову логіку — наприклад інвалідувати кеш або надсилати повідомлення.
Щоб дізнатися більше про Laravel Related Content і переглянути вихідний код, відвідайте GitHub repository.
Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу
Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту
Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel