ratiborro/laravel-relations

Generating model relations in existing model files by database columns

v1.0.5 2021-05-02 12:41 UTC

This package is auto-updated.

Last update: 2024-04-29 04:47:12 UTC


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

  1. Ошибка 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