Package Data | |
---|---|
Maintainer Username: | igaster |
Maintainer Contact: | igasteratos@gmail.com (Giannis Gasteratos) |
Package Create Date: | 2016-01-04 |
Package Last Update: | 2016-01-24 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-12-14 15:08:47 |
Package Statistics | |
---|---|
Total Downloads: | 145 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 5 |
Total Watchers: | 3 |
Total Forks: | 0 |
Total Open Issues: | 0 |
Eloquent Multiple Table Inheritance: Use a One-To-One (or One-To-Many) relation between a parent & child Tables to simulate inheritance between Models.
Edit your project's composer.json file to require:
"require": {
"igaster/eloquent-inheritance": "~1.0"
}
and install with composer update
// Model Foo is the parent model
Schema::create('foo', function (Blueprint $table) {
$table->increments('id');
$table->integer('a');
});
// Model Bar inherits Foo.
Schema::create('bar', function (Blueprint $table) {
$table->increments('id');
$table->integer('b');
$table->integer('foo_id')->nullable(); // Foreign Key to Foo
});
Your models should use the EloquentInherited
Trait
class Foo extends Eloquent
{
use \igaster\EloquentInheritance\EloquentInherited;
// ...
public function fooMethod(){}
}
class Bar extends Eloquent
{
use \igaster\EloquentInheritance\EloquentInherited;
// ...
public function barMethod(){}
}
class BarExtendsFoo extends igaster\EloquentInheritance\InheritsEloquent{
// Set Parent/Child classes
public static $parentClass = Foo::class;
public static $childClass = Bar::class;
// You must declare Parent/Child keys explicity:
public static $parentKeys = ['id','a'];
public static $childKeys = ['id','b','foo_id'];
// Childs Foreign Key (points to Parent)
public static $childFK = 'foo_id';
// You can add your functions / variables ...
public function newMethod(){}
}
// Create a composite Model:
$fooBar = BarExtendsFoo::create([ // Creates and Saves Foo & Bar in the Database
'a' => 1,
'b' => 2,
]);
// Access Attributes:
$fooBar->a; // = 1 (from Foo model)
$fooBar->b; // = 2 (from Bar model)
// Call Methods:
$fooBar->fooMethod(); // from Foo Model
$fooBar->barMethod(); // from Bar Model
$fooBar->newMethod(); // from self
// Query as an Eloquent model:
$fooBar = BarExtendsFoo::find(1);
$fooBar = BarExtendsFoo::where('a',1)->first();
$fooBar = BarExtendsFoo::get(); // Collection of BarExtendsFoo
$fooBar->save(); // Saves Foo & Bar
$fooBar->delete(); // Deletes Foo & Bar
$fooBar->update([ // Updates Foo & Bar
'a' => 10,
'b' => 20,
]);