Wallogit.com
2017 © Pedro Peláez
Simple single table inheritance for eloquent models in Laravel & Lumen
This is a very simple implementation of single table inheritance for Eloquent (Laravel & Lumen)., (*1)
There are no attribute restrictions or anything that could be considered robust. There are other libraries that do those things quite well., (*2)
This simply allows you to have a single table that, when fetched, is thrown into an Eloquent model of your choice, defined by a column in that table (typically "type", which is the default keyed type column. You can customize this)., (*3)
For instance, imagine you have the following table (called people):, (*4)
| id | name | sex |
|---|---|---|
| 1 | Fred | boy |
| 2 | Jill | girl |
... and imagine you had the following classes:, (*5)
class Person extends StiParent
{
protected $table = 'people';
protected static $stiKey = 'sex';
protected static $stiChildren = [
'boy' => Boy::class,
'girl' => Girl::class,
];
}
class Boy extends Person
{
//
}
class Girl extends Person
{
//
}
When you fetch all people, you will get a mix of boys & girls in the collection., (*6)
When you fetch just boys, you will get just boys., (*7)
When you fetch just girls, you will get just girls., (*8)
Person class abstract.hasMany association, you must make sure you specify the foreign key. Otherwise, it will try to automatically generate one from the class name.