ratiborro / laravel-relations
Generating model relations in existing model files by database columns
Requires
- php: >=7.1
- doctrine/dbal: ^2.1|^3.0
- illuminate/console: ^5.5|^6|^7|^8
- illuminate/support: ^5.5|^6|^7|^8
README
Пакет для максимально простого создания методов отношений модели по колонкам и внешним ключам (если есть) в базе данных.
Можно автоматически генерировать отношения по имеющимся колонкам и внешним ключам (если есть) таблицы модели, как угодно настраивая шаблон каждого генерируемого отношения.
Внимание! Генерация происходит в уже существующих классах модели, без создания новых файлов и классов. Существующий код НЕ затрагивается. Так что используйте модели как угодно без страха потери или перезаписи ваших изменений.
Installation
Установите пакет:
composer require ratiborro/laravel-relations --dev
Usage
Создайте отношения для модели одной простой командой:
php artisan make:relations ModelName
Команда найдёт файл модели (в пределах базовой директории моделей из конфига), сгенерирует имена для всех будущих отношений по колонкам в БД (а также по внешним ключам, если таковые имеются), заполнит их логикой из шаблонов, а затем импортирует их в модель (сразу после существующих отношений при их наличии, иначе - в конец класса модели).
Вы можете менять созданные методы отношений как захотите без страха потери ваших изменений, так как пакет не затрагивает уже созданные методы.
Configuration
Публикация конфига:
php artisan vendor:publish --tag=laravel-relations-config
Публикация шаблонов (stubs) различных объектов Laravel:
php artisan stub:publish
Публикация шаблонов создаваемых методов отношений (для их дальнейшего редактирования):
php artisan vendor:publish --tag=laravel-relations-stubs
Examples
Например, есть модели User, Post (с колонкой user_id), Tag и PostTag.
Для генерации методов отношений для модели Post введём консольную команду:
php artisan make:relations Post
Команда сгенерирует связи user (belongsTo), tags (belongsToMany) и postTags (hasMany) с указанием всех необходимых параметров.
Если названия ваших колонок соответствуют стандартам именования, то по-умолчанию опциональные параметры связей будут пропущены. Однако вы можете указать обязательность указания опциональных параметров в конфиге.
Если какие-либо из этих отношений уже были сгенерированы ранее, то они не будут перезаписаны. Даже если был модифицирован код этих методов (кроме названия). Добавятся только отсутствующие отношения.
Соответственно, вызов генерации отношений для одной и той же модели любое количество раз подряд лишь единожды добавит недостающий код. А значит, например, при добавлении новой колонки в модель (указывающую на другую сущность) вы без страха можете снова вызывать команду генерации отношений для этой модели, и она сгенерирует необходимый метод отношения, не затрагивая остальные.
Troubleshooting
Ошибка
Model not exists
: убедитесь, что namespace модели совпадает с тем, что прописан в конфиге.Например, если в конфиге прописан namespace
App\Models
, то вы можете вызывать модель через её название:php artisan make:relations User
, если она находится непосредственно в пространстве имён App/Models, или же черезphp artisan make:relations SubdirectoryName/User
, если модель находится в подпапке и имеет другой namespace (App/Models/Subdirectory в примере).Если все модели лежат в другой папке (не App/Models), просто измените конфиг
models.base_namespace
.
Contacts
Author: Ratibor Korobin