Уявіть, що ви створюєте нову функцію для свого продукту.
Нічого масштабного — просто розумніший спосіб досліджувати дані про нерухомість, щось на кшталт легкого браузера Airbnb.
А замість написання складних запитів ви хочете, щоб розробники ставили питання простою природною мовою, наприклад:
«Покажи мені апартаменти в Barcelona до $100.»
«Знайди місця в Porto з WiFi та щонайменше 2 спальнями.»
Жодного синтаксису, який треба запам’ятовувати.
Ніяких здогадок.
Просто намір → результат.
У цьому навчальному посібнику ми зробимо невеликий, але потужний проєкт, який робить саме це, використовуючи:
Замість списку розділених кроків ми побудуємо цей проєкт як наратив, де кожен крок природно виникає з потреб попереднього.
Починаємо.
Наша мета — створити Airbnb Explorer, невеликий модуль для Laravel, який вміє:
Це не буде «ще один CRUD».
Це поступовий шлях від ідеї → використання → абстракція → інсайт.
Перш ніж занурюватися в код, варто пояснити, чому MongoDB підходить для такого дослідницького, AI-асистованого застосунку.
Кожен запис у наборі sample_airbnb містить багато полів:
Документна модель MongoDB дозволяє природно зберігати й запитувати такі структури без міграцій чи жорсткої схеми.
Для дослідницької розробки й AI-згенерованих запитів ця гнучкість дуже корисна.
MongoDB пропонує:
Це природно відповідає типовим завданням пошуку нерухомості, особливо коли результати формуються динамічною користувацькою наміром або AI-обмеженнями.
MongoDB aggregation pipeline дозволяє отримувати інсайти, наприклад:
Усе всередині бази даних — без додаткового шару аналітики.
Laravel Boost — це нова функція Laravel, що приносить розробку в природній мові у ваш робочий процес.
Вона складається з трьох частин:
Це бічна панель в популярних редакторах, як-от VS Code, PHPStorm, Sublime Text і Cursor.
Вона надає:
Це основний інтерфейс, через який розробники «спілкуються» з проєктом.
Коли ви вмикаєте Boost у проєкті, Laravel додає:
Boost використовує це, щоб зрозуміти моделі, методи й структуру вашого проєкту.
Boost здатен відкривати методи вашої моделі через:
Це робить вашу доменну логіку «живою» — AI природно звертається до хелперів, які ви визначаєте.
Щоб використовувати Boost у проєкті, його вмикають під час створення проєкту.
Laravel надає прапорець:
laravel new airbnb-explorer --boost
Це:
Якщо ви вже створили проєкт, Boost можна ввімкнути вручну:
php artisan boost:install
Але рекомендований спосіб — і єдиний, що розглядається в цьому посібнику — це прапорець --boost при створенні проєкту.
Почніть зі створення нового Laravel-проєкту з увімкненим Boost:
laravel new airbnb-explorer
Прапорець --boost створює необхідні файли метаданих і конфігурації, які дозволяють Laravel Boost зрозуміти структуру проєкту та виконувати інструкції на природній мові.
На боці MongoDB створіть безкоштовний кластер M0 в Atlas і завантажте набір даних sample_airbnb, який містить понад 5 000 реальних оголошень.
Цей набір даних стане «світом», який потім досліджуватиме ваш AI-асистент.
Встановіть 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, ваш світ офіційно підключений.
Тепер 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", модель працює.
Ось і чарівний момент.
Відкрийте редактор із увімкненим Boost і скажіть:
«Using the ListingAndReviews model, show me 5 listings in Barcelona.»
Boost:
Наприклад:
ListingAndReviews::where('address.market', 'Barcelona')
->limit(5)
->get();
Ви щойно виконали запит до MongoDB, використовуючи природну мову.
Але після кількох подібних запитів ви помічаєте, що виникають шаблони…
Більшість запитів мають однакову структуру:
Замість повторення — і щоб допомогти 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 вашій доменній мові.
Після дослідження оголошень наступне природне питання:
«Які інсайти я можу витягти?»
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?»
І він обиратиме ваш хелпер у першу чергу.
Boost навчається з ваших:
Коли ви створюєте методи на кшталт…
public static function affordable(string $city, float $maxPrice = 75)
…Boost починає розуміти:
Отже, підказки на кшталт…
«Find budget-friendly places in Porto.»
…коректно зіставлятимуться з вашим хелпером.
Boost не просто здогадується — він навчається.
Зі зростанням запитів зростає й потреба в продуктивності.
Створіть індекси:
$collection->createIndex(['address.market' => 1]);
$collection->createIndex(['price' => 1]);
$collection->createIndex(['address.market' => 1, 'price' => 1]);
Запустіть знову:
"Show me affordable apartments in Porto"
Тепер виконання відбувається значно швидше, часто на порядок.
AI + оптимізовані структури даних = сучасна розробка.
Ваші методи тепер формують невелике внутрішнє 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.
На цей момент у вас є:
Ваш робочий процес виглядає так:
Developer Intent → AI Understanding → Helper Method → Query → Insight
Ви не пишете запити до бази вручну.
Ви формулюєте цілі — і Boost перетворює їх на код.
Це розробка, керована наміром, а не синтаксисом.
Працюючи з Laravel + MongoDB + Boost, розробники часто стикаються з кількома проблемами. Ось найпоширеніші — і як їх швидко виправити.
Зазвичай це трапляється через те, що кластер блокує запит.
В MongoDB Atlas:
Security → Network Access → Add IP Address
Для девелопменту більшість використовують:
0.0.0.0/0 (allow all)
Але ви також можете додати свою конкретну IP-адресу.
Якщо ви користуєтесь VPN або корпоративним Wi‑Fi, IP може змінюватися — оновлюйте whitelist відповідно.
Laravel не підключиться до MongoDB без встановленого PHP-розширення.
Типові симптоми:
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.
Laravel не має вбудованої підтримки MongoDB за замовчуванням.
Якщо ви забули встановити пакет…
composer require mongodb/laravel-mongodb
…ви побачите помилки на кшталт:
Типові помилки:
Приклад робочої конфігурації:
MONGODB_URI="mongodb+srv://username:password@cluster123.mongodb.net"
MONGODB_DATABASE="sample_airbnb"
DB_CONNECTION=mongodb
Симптоми:
Boost сильно покладається на:
Приклад:
/**
* Get affordable listings in a city.
*
* @example ListingAndReviews::affordable("Porto", 75)
*/
Коли документація чітка, Boost надійно обиратиме ваш хелпер у першу чергу.
Іноді Boost виконує код, який у Tinker падає, бо:
use App\Models\ListingAndReviews;
І завжди перевіряйте фактичні імена полів у вашому наборі даних.
Під час цієї подорожі ви створили більше, ніж просто приклад. Ви:
Laravel додає елегантності.
MongoDB дає гнучкість.
Boost приносить інтелект.
Разом вони відкривають новий тип робочого процесу.
Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel
Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу
Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!