Як створити AI-powered додаток на Laravel + MongoDB за допомогою Laravel Boost

Перекладено ШІ 2 Laravel News 02 червня, 2026

Цей практичний посібник покаже, як на Laravel і MongoDB створити модуль Airbnb Explorer, що виконує запити з природної мови. Хочете навчити AI використовувати ваші допоміжні методи, виконувати агрегації й отримувати інсайти без складних запитів?

Уявіть, що ви створюєте нову функцію для свого продукту.

Нічого масштабного — просто розумніший спосіб досліджувати дані про нерухомість, щось на кшталт легкого браузера Airbnb.

А замість написання складних запитів ви хочете, щоб розробники ставили питання простою природною мовою, наприклад:

«Покажи мені апартаменти в Barcelona до $100.»
«Знайди місця в Porto з WiFi та щонайменше 2 спальнями.»

Жодного синтаксису, який треба запам’ятовувати.

Ніяких здогадок.

Просто намір → результат.

У цьому навчальному посібнику ми зробимо невеликий, але потужний проєкт, який робить саме це, використовуючи:

  • Laravel 12.
  • MongoDB Atlas.
  • Laravel Boost для запитів у природній мові.
  • AI-discoverable helper methods, які стають частиною вашої предметної області.

Замість списку розділених кроків ми побудуємо цей проєкт як наратив, де кожен крок природно виникає з потреб попереднього.

Починаємо.

# What we’re building

Наша мета — створити Airbnb Explorer, невеликий модуль для Laravel, який вміє:

  • Отримувати реальні дані про нерухомість із набору даних MongoDB sample_airbnb.
  • Відповідати на запитання в природній мові за допомогою Laravel Boost.
  • Генерувати інсайти за допомогою MongoDB aggregations.
  • Надавати повторно використовувані, AI-discoverable domain helpers.
  • Підтримувати сучасний робочий процес, орієнтований на наміри.

Це не буде «ще один CRUD».

Це поступовий шлях від ідеї → використання → абстракція → інсайт.

# Why MongoDB for this project?

Перш ніж занурюватися в код, варто пояснити, чому MongoDB підходить для такого дослідницького, AI-асистованого застосунку.

# 1. Flexible document schema

Кожен запис у наборі sample_airbnb містить багато полів:

  • Вкладені об'єкти (наприклад address)
  • Масиви (наприклад amenities)
  • Необов’язкові поля
  • Різна структура між документами

Документна модель MongoDB дозволяє природно зберігати й запитувати такі структури без міграцій чи жорсткої схеми.

Для дослідницької розробки й AI-згенерованих запитів ця гнучкість дуже корисна.

# 2. Rich query capabilities

MongoDB пропонує:

  • Потужну фільтрацію.
  • Геопросторові запити.
  • Повні aggregation pipelines.
  • Фасетну аналітику.
  • Запити по масивах.
  • Гнучке індексування.

Це природно відповідає типовим завданням пошуку нерухомості, особливо коли результати формуються динамічною користувацькою наміром або AI-обмеженнями.

# 3. Built-in analytics engine (aggregation framework)

MongoDB aggregation pipeline дозволяє отримувати інсайти, наприклад:

  • Середня ціна за типом нерухомості.
  • Розподіл кількості спалень.
  • Найпопулярніші amenities.

Усе всередині бази даних — без додаткового шару аналітики.

# What is Laravel Boost?

Laravel Boost — це нова функція Laravel, що приносить розробку в природній мові у ваш робочий процес.

Вона складається з трьох частин:

# 1. The Boost assistant (IDE integration)

Це бічна панель в популярних редакторах, як-от VS Code, PHPStorm, Sublime Text і Cursor.

Вона надає:

  • Запити у природній мові.
  • Генерацію коду.
  • Розуміння проєкту.
  • Виконання PHP-коду в ізольованому середовищі.
  • Пояснення та допомогу з рефакторингом.

Це основний інтерфейс, через який розробники «спілкуються» з проєктом.

# 2. The Boost engine (inside your Laravel project)

Коли ви вмикаєте Boost у проєкті, Laravel додає:

  • Метадані файли.
  • Підказки про структуру.
  • Визначення контексту.
  • Механізми безпечного виконання коду.

Boost використовує це, щоб зрозуміти моделі, методи й структуру вашого проєкту.

# 3. AI-discoverable methods

Boost здатен відкривати методи вашої моделі через:

  • Конвенції в іменах.
  • PHPDoc-коментарі.
  • Приклади.
  • Типи параметрів.

Це робить вашу доменну логіку «живою» — AI природно звертається до хелперів, які ви визначаєте.

# Installing Laravel Boost

Щоб використовувати Boost у проєкті, його вмикають під час створення проєкту.

Laravel надає прапорець:

laravel new airbnb-explorer --boost

Це:

  • Скелює файли метаданих Boost.
  • Налаштовує проєкт для AI-підтримки.
  • Дозволяє розширенню Boost в IDE одразу розуміти проєкт.

Якщо ви вже створили проєкт, Boost можна ввімкнути вручну:

php artisan boost:install

Але рекомендований спосіб — і єдиний, що розглядається в цьому посібнику — це прапорець --boost при створенні проєкту.

# Spinning up the world (setting up Laravel + MongoDB)

Почніть зі створення нового Laravel-проєкту з увімкненим Boost:

laravel new airbnb-explorer

Прапорець --boost створює необхідні файли метаданих і конфігурації, які дозволяють Laravel Boost зрозуміти структуру проєкту та виконувати інструкції на природній мові.

На боці MongoDB створіть безкоштовний кластер M0 в Atlas і завантажте набір даних sample_airbnb, який містить понад 5 000 реальних оголошень.

Цей набір даних стане «світом», який потім досліджуватиме ваш AI-асистент.

# Connecting the dots: Laravel ↔ MongoDB

Встановіть PHP-розширення MongoDB і пакет Laravel MongoDB:

pecl install mongodb
composer require mongodb/laravel-mongodb

Додайте підключення до .env:

MONGODB_URI="mongodb+srv://<user>:<pass>@cluster.mongodb.net"
MONGODB_DATABASE="sample_airbnb"
DB_CONNECTION=mongodb

Потім перевірте з’єднання:

DB::connection('mongodb')->getCollection('listingsAndReviews')->countDocuments();

Якщо ви побачите щось на кшталт 5555, ваш світ офіційно підключений.

# Giving shape to the data (creating the model)

Тепер Laravel має спосіб «думати» про вашу колекцію MongoDB.

Створіть модель:

php artisan make:model ListingAndReviews

Потім налаштуйте її:

use MongoDB\Laravel\Eloquent\Model;
 
class ListingAndReviews extends Model
{
    protected $connection = 'mongodb';
    protected $collection = 'listingsAndReviews';
 
    protected $fillable = [
        'name', 'summary', 'property_type', 'bedrooms', 'beds',
        'bathrooms', 'price', 'address', 'amenities'
    ];
 
    protected $casts = [
        'bedrooms' => 'integer',
        'bathrooms' => 'decimal:1',
        'price' => 'decimal:2',
    ];
}

Спробуйте в Tinker:

ListingAndReviews::first()->name;

Якщо побачите щось на кшталт "Ribeira Charming Duplex", модель працює.

# Talking to your data for the first time (using Boost)

Ось і чарівний момент.

Відкрийте редактор із увімкненим Boost і скажіть:

«Using the ListingAndReviews model, show me 5 listings in Barcelona.»

Boost:

  1. Читає структуру проєкту.
  2. Виявляє вашу модель.
  3. Генерує правильний код.
  4. Виконує його.
  5. Повертає реальні дані.

Наприклад:

ListingAndReviews::where('address.market', 'Barcelona')
    ->limit(5)
    ->get();

Ви щойно виконали запит до MongoDB, використовуючи природну мову.

Але після кількох подібних запитів ви помічаєте, що виникають шаблони…

# Extracting patterns into AI-friendly helper methods

Більшість запитів мають однакову структуру:

  • Вибір міста.
  • Застосування фільтрів (ціна, спальні, тип нерухомості).
  • Обмеження кількості результатів.

Замість повторення — і щоб допомогти Boost зрозуміти вашу домену — ви винесете логіку в метод:

/**
 * Get listings from a specific city with optional filters.
 *
 * @param string $city
 * @param array  $filters Optional:
 *   - propertyType
 *   - minBedrooms
 *   - maxPrice
 *   - limit
 *
 * @example ListingAndReviews::byCity("Porto")
 * @example ListingAndReviews::byCity("Barcelona", ["limit" => 5])
 */
public static function byCity(string $city, array $filters = [])
{
    $query = static::where('address.market', $city);
 
    if (isset($filters['propertyType']))
        $query->where('property_type', $filters['propertyType']);
 
    if (isset($filters['minBedrooms']))
        $query->where('bedrooms', '>=', $filters['minBedrooms']);
 
    if (isset($filters['maxPrice']))
        $query->where('price', '<=', $filters['maxPrice']);
 
    return $query
        ->limit($filters['limit'] ?? 10)
        ->get(['_id', 'name', 'price', 'bedrooms', 'property_type', 'address']);
}

Тепер введіть:

«Show me apartments in Porto under 80 dollars.»

Boost автоматично використає ваш метод:

ListingAndReviews::byCity("Porto", [
    "propertyType" => "Apartment",
    "maxPrice" => 80,
]);

Ви вже не просто робите запити.

Ви вчите AI вашій доменній мові.

# Turning queries into insights (analytics with aggregation)

Після дослідження оголошень наступне природне питання:

«Які інсайти я можу витягти?»

MongoDB блискуче підходить для аналітики через aggregation framework.

Створіть перший аналітичний хелпер:

/**
 * Get price stats grouped by property type.
 *
 * @example ListingAndReviews::priceStatsByType()
 * @example ListingAndReviews::priceStatsByType("Porto")
 */
public static function priceStatsByType(?string $city = null)
{
    $pipeline = [];
 
    if ($city) {
        $pipeline[] = ['$match' => ['address.market' => $city]];
    }
 
    $pipeline[] = [
        '$group' => [
            '_id' => '$property_type',
            'averagePrice' => ['$avg' => '$price'],
            'count' => ['$sum' => 1],
            'minPrice' => ['$min' => '$price'],
            'maxPrice' => ['$max' => '$price'],
        ]
    ];
 
    return DB::connection('mongodb')
        ->collection('listingsAndReviews')
        ->aggregate($pipeline)
        ->toArray();
}

Тепер Boost зможе відповідати на питання типу:

«Яка середня ціна за типом нерухомості в Barcelona?»

І він обиратиме ваш хелпер у першу чергу.

# Teaching the AI what your domain means

Boost навчається з ваших:

  • Імен методів.
  • PHPDoc-коментарів.
  • Структур параметрів.
  • Прикладів.

Коли ви створюєте методи на кшталт…

public static function affordable(string $city, float $maxPrice = 75)

…Boost починає розуміти:

  • «Affordable» = ціна нижче порогу.
  • Цей метод — переважний шлях для бюджетних запитів.

Отже, підказки на кшталт…

«Find budget-friendly places in Porto.»

…коректно зіставлятимуться з вашим хелпером.

Boost не просто здогадується — він навчається.

# Supercharging performance with indexes

Зі зростанням запитів зростає й потреба в продуктивності.

Створіть індекси:

$collection->createIndex(['address.market' => 1]);
$collection->createIndex(['price' => 1]);
$collection->createIndex(['address.market' => 1, 'price' => 1]);

Запустіть знову:

"Show me affordable apartments in Porto"

Тепер виконання відбувається значно швидше, часто на порядок.

AI + оптимізовані структури даних = сучасна розробка.

# Giving your work a safety net (tests)

Ваші методи тепер формують невелике внутрішнє API.

Тести фіксують очікувану поведінку:

public function test_by_city_filters_correctly()
{
    $listings = ListingAndReviews::byCity("Barcelona", [
        "propertyType" => "Apartment",
        "maxPrice" => 100,
    ]);
 
    $this->assertNotEmpty($listings);
 
    $this->assertTrue($listings->every(fn($l) =>
        $l->property_type === "Apartment" &
        $l->price <= 100
    ));
}

Тести також допомагають Boost. Вони:

  • Прояснюють семантику.
  • Зменшують неоднозначність.
  • Підсилюють правила домену.

Ви створили сигнали коректності для людей і для AI.

# A developer workflow powered by AI

На цей момент у вас є:

  • Доменні хелпери специфічні для завдань.
  • Аналітика, побудована на aggregation.
  • Розробка у природній мові через Boost.
  • Швидкі запити завдяки індексам.
  • Стабільність через тести.

Ваш робочий процес виглядає так:

Developer Intent → AI Understanding → Helper Method → Query → Insight

Ви не пишете запити до бази вручну.

Ви формулюєте цілі — і Boost перетворює їх на код.

Це розробка, керована наміром, а не синтаксисом.

# Common pitfalls and how to avoid them

Працюючи з Laravel + MongoDB + Boost, розробники часто стикаються з кількома проблемами. Ось найпоширеніші — і як їх швидко виправити.

# 1. “Connection timeout” or “Could not connect to MongoDB Atlas”

Зазвичай це трапляється через те, що кластер блокує запит.

# ✔ Fix: Add your IP to the Atlas network access list

В MongoDB Atlas:

Security → Network Access → Add IP Address

Для девелопменту більшість використовують:

0.0.0.0/0 (allow all)

Але ви також можете додати свою конкретну IP-адресу.

Якщо ви користуєтесь VPN або корпоративним Wi‑Fi, IP може змінюватися — оновлюйте whitelist відповідно.

# 2. Forgetting to install the MongoDB PHP extension

Laravel не підключиться до MongoDB без встановленого PHP-розширення.

Типові симптоми:

  • “Class MongoDB\Client not found”
  • “Call to undefined function MongoDB\Driver\Manager()”
  • pecl не встановлений

# ✔ Fix: Install the extension

macOS:pecl install mongodb
 
Ubuntu:sudo apt install php-mongodb
 
Windows:Download the extension matching your PHP version and add to php.ini:extension=mongodb

Не забудьте перезапустити веб‑сервер або PHP‑FPM.

# 3. Not using the correct Laravel MongoDB driver

Laravel не має вбудованої підтримки MongoDB за замовчуванням.

Якщо ви забули встановити пакет…

composer require mongodb/laravel-mongodb

…ви побачите помилки на кшталт:

  • “Database type mongodb not supported.”
  • “Call to undefined method connection() on driver ‘mongodb.’”

# 4. Missing or misconfigured ENV variables

Типові помилки:

  • Невірний connection string
  • Відсутні username/password
  • Використання неправильного імені бази
  • Спеціальні символи в паролі не закодовані в URL

# ✔ Fix: Verify

# .env

Приклад робочої конфігурації:

MONGODB_URI="mongodb+srv://username:password@cluster123.mongodb.net"
MONGODB_DATABASE="sample_airbnb"
DB_CONNECTION=mongodb

# 5. AI not discovering your helper methods

Симптоми:

  • Boost продовжує генерувати сирі запити замість виклику вашого хелпера.
  • Boost ігнорує методи вашої доменної області.
  • Boost неправильно інтерпретує параметри.

# ✔ Fix: Add precise PHPDoc + examples

Boost сильно покладається на:

  • Чіткі імена параметрів.
  • Чисті сигнатури методів.
  • Пояснення в PHPDoc.
  • Приклади використання.
  • Послідовне іменування.

Приклад:

/**
 * Get affordable listings in a city.
 *
 * @example ListingAndReviews::affordable("Porto", 75)
 */

Коли документація чітка, Boost надійно обиратиме ваш хелпер у першу чергу.

# 6. Tinker execution errors when using Boost

Іноді Boost виконує код, який у Tinker падає, бо:

  • Модель не була імпортована.
  • MongoDB-драйвер не завантажився.
  • Запит посилається на відсутнє поле.

# ✔ Fix: Preface your commands with model imports

use App\Models\ListingAndReviews;

І завжди перевіряйте фактичні імена полів у вашому наборі даних.

# Conclusion: Building smarter with Laravel + MongoDB + AI

Під час цієї подорожі ви створили більше, ніж просто приклад. Ви:

  • Підключили Laravel до MongoDB Atlas.
  • Досліджували дані через природну мову.
  • Створили AI-discoverable helper methods.
  • Побудували інсайти за допомогою aggregations.
  • Оптимізували продуктивність індексами.
  • Забезпечили стабільність тестами.
  • Навчили AI, як працює ваша доменна область.

Laravel додає елегантності.

MongoDB дає гнучкість.

Boost приносить інтелект.

Разом вони відкривають новий тип робочого процесу.

Популярні

Інше, що варто прочитати

74 Оновлено 01 червня, 2026

Laravel Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel

20 Оновлено 01 червня, 2026

Створення MCP-серверів на PHP

Модельний контекстний протокол (MCP) відкриває нові горизонти в інтеграції AI-додатків з PHP. Дізнайтеся, як легко створити сервер, що відповідає MCP, та які можливості відкриваються для вашого проєкту

53 Оновлено 01 червня, 2026

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу