Google Sheets как база данных в Laravel

В Laravel можно использовать Google Sheets как источник данных для Eloquent-моделей. Для этого существует пакет grosv/eloquent-sheets, который позволяет работать с таблицей Google Sheets почти как с обычной моделью Laravel.

Пакет строится поверх revolution/laravel-google-sheets, который предоставляет интеграцию с Google Sheets API v4.

Установка

Установите пакет через Composer:

composer require grosv/eloquent-sheets

Для работы также потребуется настроить Google Sheets API и доступ к таблице через Google Cloud Console. Обычно используется сервисный аккаунт и JSON-файл с credentials.

Структура Google Sheets

Таблица должна содержать:

  • строку заголовков;

  • колонку первичного ключа.

По умолчанию Eloquent ожидает поле id. Если используется другое имя, его можно указать в модели.

Пример таблицы:

id

name

email

1

John Doe

test1@example.com

2

Jane Doe

test2@example.com

Создание модели

Модель наследуется от SheetModel:

<?php

namespace App\Models;

use Grosv\EloquentSheets\SheetModel;

class Contact extends SheetModel
{
    // Spreadsheet ID
    protected $spreadsheetId = '1HxNqqLtc614UVLoTLEItfvcdcOm3URBEM2Zkr36Z1rE';

    // Sheet ID (gid)
    protected $sheetId = '0';

    // Строка заголовков
    protected $headerRow = 1;
}

ID документа можно взять из URL Google Sheets:

https://docs.google.com/spreadsheets/d/1HxNqqLtc614UVLoTLEItfvcdcOm3URBEM2Zkr36Z1rE/edit

gid листа находится в конце URL:

gid=0

Работа с данными

После настройки можно использовать Eloquent-запросы.

Получение всех записей:

$contacts = Contact::all();

Поиск записи:

$contact = Contact::find(1);

Фильтрация:

$users = Contact::where('name', 'John Doe')->get();

Получение первой записи:

$user = Contact::first();

Пример контроллера

<?php

namespace App\Http\Controllers;

use App\Models\Contact;

class ContactController extends Controller
{
    public function index()
    {
        $contacts = Contact::all();

        return response()->json($contacts);
    }
}

Ограничения

Пакет поддерживает только чтение данных. Операции insert, update и delete недоступны.

Google Sheets подходит для:

  • небольших внутренних проектов;

  • MVP;

  • административных панелей;

  • совместного редактирования данных через Google Sheets.

При большом объёме данных производительность начинает заметно снижаться. В обсуждениях разработчики отмечают медленную работу запросов и высокую вероятность ошибок при ручном изменении структуры таблицы.

Использование Google Sheets API напрямую

Если требуется запись данных в таблицу, можно использовать пакет revolution/laravel-google-sheets.

Установка:

composer require revolution/laravel-google-sheets

Пример добавления строки:

use Revolution\Google\Sheets\Facades\Sheets;

$append = [
    'John Doe',
    '[email protected]',
    'Laravel'
];

Sheets::spreadsheet('SPREADSHEET_ID')
    ->sheet('Sheet1')
    ->append([$append]);

Для корректной обработки дат и чисел рекомендуется использовать USER_ENTERED вместо RAW.

Настройка Google API

После публикации конфигурации:

php artisan vendor:publish --tag="google-config"

в .env добавляются параметры:

GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT=

Также потребуется указать scopes для Google Sheets API.

Альтернативный подход

Во многих проектах Google Sheets используют не как основную базу данных, а как интерфейс ввода данных. Данные затем синхронизируются в PostgreSQL или MySQL через jobs или API. Такой подход считается более стабильным и масштабируемым.

Похожие статьи

Прямая итерация Fluent-объектов в Laravel

Обзор обновления Laravel, в котором Fluent-объекты получили поддержку прямой итерации через Iterable-контракт. Объясняется, почему это улучшение упрощает код и делает работу с данными более естественной.

Правила rewrite URL в NGINX

Разбор директив rewrite и return в NGINX с примерами редиректов, обработки URL и настройки маршрутов для Laravel и других приложений. В статье показаны основные флаги rewrite, использование регулярных выражений и типовые конфигурации.

Ward: сканер безопасности для Laravel

Ward - это CLI-инструмент для проверки безопасности Laravel-проектов. Он анализирует конфигурацию, зависимости и код, выявляя уязвимости и ошибки настроек. Подходит для локальной проверки и интеграции в CI/CD.