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

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

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

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

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

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

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

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

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

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

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

Починаємо.

# What we’re building

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

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

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

# Why MongoDB for this project?

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

# 1. Flexible document schema

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

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

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

# 2. Rich query capabilities

MongoDB пропонує:

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

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

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

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

# What is Laravel Boost?

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

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

# 1. The Boost assistant (IDE integration)

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

Вона надає:

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

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

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

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

# 3. AI-discoverable methods

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

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

# Installing Laravel Boost

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

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

laravel new airbnb-explorer --boost

Це:

Якщо ви вже створили проєкт, 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 навчається з ваших:

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

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

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

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

«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

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

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

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-розширення.

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

# ✔ 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

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

# 4. Missing or misconfigured ENV variables

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

# ✔ 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

Симптоми:

# ✔ Fix: Add precise PHPDoc + examples

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

Приклад:

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

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

# 6. Tinker execution errors when using Boost

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

# ✔ Fix: Preface your commands with model imports

use App\Models\ListingAndReviews;

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

# Conclusion: Building smarter with Laravel + MongoDB + AI

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

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

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

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

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

Популярні

Logomark Logotype

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

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

Logomark Logotype

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

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

Logomark Logotype

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

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