Laravel Google Sheets Database Driver від AmazingBV додає кастомне з’єднання google-sheets. Це дозволяє Eloquent, конструктору запитів та міграціям працювати безпосередньо з Google Таблицями.
Концепція проста: таблиця стає базою даних, вкладки — таблицями, а перший рядок визначає назви колонок. Решту технічних деталей пакет бере на себе.
# Коли це варто використовувати
Автор відверто зазначає: це не заміна MySQL. Пакет створений для команд із помірними запитами: невеликих бек-офісних застосунків, прототипів чи внутрішніх інструментів, де використання MySQL або PostgreSQL здається надлишковим. Рішення ідеально підходить, якщо команда вже працює з таблицями, не-технічні фахівці хочуть редагувати дані вручну, а кількість рядків залишається невеликою.
Якщо вам потрібні транзакції, зовнішні ключі, обмеження на рівні бази даних або висока швидкість запису — цей інструмент не для вас.
# Налаштування
Після встановлення через Composer:
composer require amazingbv/laravel-google-sheets-database-driver
Вам знадобиться JSON-ключ service account із Google Cloud. Короткий план: створіть проект у Google Cloud, увімкніть Google Sheets API, створіть service account і завантажте ключ. Детальна інструкція є у репозиторії проекту.
Отримавши ключ, додайте ID таблиці та шлях до файлу облікових даних у ваш .env:
DB_CONNECTION=google-sheets
DB_DATABASE=your-google-spreadsheet-id
GOOGLE_SHEETS_CREDENTIALS_PATH=/absolute/path/to/service-account.json
Електронна адреса client_email вашого сервісного акаунту повинна мати доступ Editor до таблиці. Після цього виконайте команду для підготовки внутрішніх вкладок драйвера:
php artisan sheets:install
# Невеликий приклад
Уявімо простий застосунок для реєстрації на мітап. Міграція виглядає як звичайна міграція Laravel:
Schema::connection('google-sheets')->create('rsvps', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->boolean('attending')->default(true);
$table->timestamps();
});
Запустіть її за допомогою php artisan migrate --database=google-sheets, і в таблиці з’явиться вкладка rsvps із відповідними заголовками.
Сама модель не потребує особливих налаштувань:
class Rsvp extends Model
{
protected $connection = 'google-sheets';
protected $guarded = [];
protected $casts = ['attending' => 'boolean'];
}
Після цього стандартні методи працюватимуть як зазвичай:
Rsvp::create([
'name' => 'Ada Lovelace',
'email' => 'ada@example.com',
'attending' => true,
]);
$confirmed = Rsvp::where('attending', true)
->orderBy('created_at')
->get();
Кожен запис миттєво з’являється в таблиці. Це головна перевага: організатор може фільтрувати чи редагувати дані прямо в Google Sheets, поки Laravel-застосунок продовжує з ними працювати.
# Що можна і чого не можна запитувати
Драйвер підтримує лише частину Query API, а не повний SQL. Доступні where, whereIn, whereNull, whereLike, orderBy, limit, offset, стандартні агрегати (count, sum, avg тощо) та просте з’єднання inner join у пам'яті.
Не підтримуються: raw SQL, groupBy, having, unions та повноцінні транзакції. Виклики DB::transaction() сприймаються як порожні операції (no-ops) — це зберігає працездатність черг, але не забезпечує відкату змін.
Міграції працюють за схожим принципом: ->unique(), ->index() чи ->foreignId() не викличуть помилок, але Google Sheets не буде їх контролювати. Такі перевірки варто реалізувати на рівні коду застосунку.
# Робота з лімітами API
Google Sheets має жорсткі ліміти на кількість запитів за хвилину. Для захисту від них драйвер використовує кешування читання, налаштовувані обмеження (throttles), повторні спроби з експоненціальною затримкою та підтримку кеш-драйверів Laravel (file, redis тощо). Усі ці параметри можна налаштувати в .env.
# Вкладка "Database Index"
Важлива деталь: пакет створює вкладку Database Index першою в документі. Вона містить посилання на всі таблиці-вкладки. Це спрощує навігацію для користувачів, які відкривають таблицю безпосередньо.
# Спробувати
Дізнатися більше та переглянути вихідний код можна в GitHub-репозиторії проекту.