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.
