Truffle від Waad Mawlood — це пакет для Laravel, який дозволяє моделям Eloquent використовувати базу даних SQLite у пам’яті (in-memory) замість основної бази. Це рішення ідеально підходить для статичних даних та довідників — таких як країни, валюти або ролі. Ви можете робити запити через Eloquent без створення міграцій чи навантаження на основне сховище.
Використовуючи trait Truffle, ви можете визначати дані безпосередньо в моделі або завантажувати їх із зовнішніх файлів, зберігаючи доступ до query builder, зв’язків та атрибутів Eloquent.
# Визначення записів у пам’яті
Найпростіший спосіб використання Truffle — масив $records у моделі. Пакет створює тимчасову таблицю SQLite і заповнює її під час першого звернення до моделі:
use Waad\Truffle\Truffle;
use Illuminate\Database\Eloquent\Model;
class Country extends Model
{
use Truffle;
protected $records = [
['id' => 1, 'name' => 'United States', 'code' => 'US'],
['id' => 2, 'name' => 'Canada', 'code' => 'CA'],
['id' => 3, 'name' => 'United Kingdom', 'code' => 'GB'],
['id' => 4, 'name' => 'Jamaica', 'code' => 'JM'],
['id' => 5, 'name' => 'Greece', 'code' => 'GR'],
];
}
Після цього ви можете працювати з моделлю як зазвичай:
$northAmerica = Country::whereIn('code', ['US', 'JM'])->get();
# Завантаження даних із файлів
Якщо даних багато, Truffle дозволяє зберігати їх у форматах CSV, JSON або XML. Шлях до файлу вказується у властивості $truffleFile:
class Country extends Model
{
use Truffle;
protected $truffleFile = __DIR__ . '/data/countries.csv';
}
Це дозволяє відокремити дані від логіки коду та зручно керувати ними через систему контролю версій.
# Чітке визначення схеми
Truffle вміє автоматично визначати типи колонок, але для більшої надійності схему можна задати вручну за допомогою enum DataType. Це гарантує цілісність даних та коректне приведення типів:
use Waad\Truffle\Enums\DataType;
class Country extends Model
{
use Truffle;
protected $schema = [
'id' => DataType::Id,
'name' => DataType::String,
'code' => DataType::String,
'active' => DataType::Boolean,
];
}
# Продуктивність та кешування
Для прискорення роботи Truffle підтримує кешування структури та даних таблиці SQLite. Активувати його можна через параметр $truffleCache:
protected $truffleCache = true;
protected $truffleCacheTtl = 3600; // 1 година
Крім того, ви можете зберегти базу даних у конкретний файл замість оперативної пам'яті, визначивши $truffleSqliteFile.
# Встановлення
Встановити пакет можна через Composer:
composer require waad/truffle
Пакет готовий до роботи одразу після додавання trait до ваших моделей. Потрібна версія PHP 7.4 або вище; підтримується Laravel 5.5 і новіші версії.
Більше інформації, повна інструкція та вихідний код доступні на GitHub.