Сами файлы миграций ничем не отличаются от миграций в обычном приложении. Размещать их можно по стандартному пути database/migrations
. Чтобы миграции запустились после установки модуля в приложение необходимо добавить в функцию register()
сервис провайдера строку:
public function register()
{
…
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');
…
}
Для запуска миграций после установки или обновления модуля в основном приложении достаточно запустить стандартную команду php artisan migrate
.
Работа с моделями также похожа на работу с ними в обычном приложении. Модели как правило размещаются в папке src/Models
. Пример простой модели:
namespace MXJ\Addons\Blog\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class Blog.
*
* @property int $id
* @property string $name
* @property string $body
* @property bool $public
*/
class Blog extends Model
{
protected $table = 'blogs';
protected $fillable = [
'id',
'name',
'body',
'public',
'created_at',
'updated_at',
];
}
Главная сложность при работе с моделями в микросервисном приложении – то, что одни и те же модели и миграции могут быть необходимы в разных модулях. В этом случае все модели и миграции имеет смысл вынести в отдельный модуль, который при необходимости подключать через composer.json. Туда же можно добавить трейты, широко используемые хелперы, классы и т.п. При росте системы этот модуль превратится в мини-фреймворк для внутренней разработки.
Никто не ограничивает количество общих модулей, но лучше этим делом не злоупотреблять – чем изолированее каждый отдельный модуль, тем лучше. Но абсолютная изоляция тоже не всегда хорошо – нужен разумный компромисс.