Download the PHP package balfour/eloquent-dynamic-relationships without Composer
On this page you can find all versions of the php package balfour/eloquent-dynamic-relationships. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download balfour/eloquent-dynamic-relationships
More information about balfour/eloquent-dynamic-relationships
Files in balfour/eloquent-dynamic-relationships
Package eloquent-dynamic-relationships
Short Description A library for monkey patching relationships between Eloquent models at runtime
License MIT
Informations about the package eloquent-dynamic-relationships
balfour/eloquent-dynamic-relationships
A library for monkey patching relationships between Eloquent models at runtime.
You can use this library inside any Laravel application or stand-alone application which uses the Eloquent ORM.
This library is in early release and is pending unit tests.
Use Case
We developed this library when a need arose to bond models separated across multiple packages (and repositories) in an internal modular system.
Let's consider a system such as the following:
- The
framework
- the brain which glues modules together. - A
user
module - a package which allows users to login, register, etc. - A
sms
module - a package which allows users to send text messages.
These are 3 separate packages stored in independent repositories which have the bare minimum knowledge of each other.
- The
framework
knows about bothuser
andsms
modules. - The
user
module has no dependencies. - The
sms
module knows about theuser
module.
In this system, the Message model can define it's many to one relationship to the
User model; however the User model has no context of the sms
package and is therefore
not capable of defining the inverse one to many relationship back.
eg: $message->user
would succeed, but $user->messages
or $user->messages()->paginate()
would cause an error.
The responbility therefore falls on the framework
to monkey patch this inverse relationship
on the User model.
Installation
This package only needs to be installed in the repository (or repositories) containing models you want to make monkey patachable.
Usage
Configuring Monkey Patachable Model
The model which you want to make monkey patchable needs to either extend our base model, or use
the HasDynamicRelationships
trait.
Method 1 (preferred)
Method 2
Creating Dynamic Relationship
In your framework codebase which glues everything together, you'll need to bond the two
models together. This should typically be done at a bootstrap stage, such as when your app's
AppServiceProvider
is booted.
With the bond established between the 2 models, you can now use relationship calls as per normal.
eg: