В 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 | |
|---|---|---|
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/editgid листа находится в конце 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. Такой подход считается более стабильным и масштабируемым.