Orbit — это flat-file драйвер (неструктурированных файлов) для Laravel Eloquent. Он позволяет вам заменить обычную базу данных реальными файлами, с которыми вы можете работать, используя знакомые вам методы.
Посмотрим его работу на примере модели User.
Модель User
Установим пакет с помощью Composer:
composer require ryangjchandler/orbit
Orbit работает с моделью через трейт Orbit\Concerns\Orbital
. Добавляем его в нашу модель:
use Orbit\Concerns\Orbital; class User extends Model { use Orbital; }
Это всё, что нужно сделать, чтобы драйвер заработал. Но для того, чтобы модель стала функционировать как обычно, нужно сделать еще несколько дополнительных шагов:
Схема
Точно так же, как и для SQL, модель должна иметь свою схему. По ней Orbit определит, какой контент будет доступен в неструктурированных файлах и что должно быть доступно из модели.
По сути, это это обычная up
миграция:
class User extends Model { use Orbital; public static function schema(Blueprint $table) { } }
Laravel предоставляет для users
стандартную миграцию, поэтому мы можем просто взять её и скопировать в метод schema
:
class User extends Model { use Orbital; public static function schema(Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); } }
Orbit автоматически добавляет в схемы поля
created_at
иupdated_at
.
Если вы откроете tinker и наберете User::create([...])
, то увидите новую папку content/users
, а в ней новый файл 1.md
.
Настройка первичного ключа
Вещь, которую мне нравится делать с этим драйвером в моделях — использование более понятного описания в качестве первичного ключа. В случае с моделью User
это, скорее всего, будет email
, так как он будет всегда уникальным.
Чтобы это сделать в Orbit, нужно изменить $primaryKey
или перезаписать метод getKeyName
.
class User extends Model { use Orbital; protected $primaryKey = 'email'; public static function schema(Blueprint $table) { $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); } }
Теперь, при создании нового пользователя, имя файла будет таким же как и email
, что позволит легко увидеть какие уже пользователи зарегистрированы.
Изменение первичного ключа модели повлияет на внешние и локальные поля для ваших отношений. Например, если вы используете поле
User
, то Laravel поймёт, что имя внешнего поля в связанной модели будетuser_email
при использовании отношенияbelongsTo
. Это можно изменить, указав имена полей при определении отношения.
Github
Если вас заинтересовал пакет и вы хотите больше узнать о нём, то загляните в его репозиторий: https://github.com/ryangjchandler/orbit
Автор: Ryan Chandler
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.