https://github.com/karlhepler/eloquent-single-table-inheritance
Simple single table inheritance for eloquent models in Laravel & Lumen
https://github.com/karlhepler/eloquent-single-table-inheritance
eloquent laravel lumen single-table
Last synced: about 2 months ago
JSON representation
Simple single table inheritance for eloquent models in Laravel & Lumen
- Host: GitHub
- URL: https://github.com/karlhepler/eloquent-single-table-inheritance
- Owner: karlhepler
- License: mit
- Created: 2016-07-09T18:08:38.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-08-15T15:51:44.000Z (over 8 years ago)
- Last Synced: 2025-02-17T06:03:06.333Z (2 months ago)
- Topics: eloquent, laravel, lumen, single-table
- Language: PHP
- Size: 9.77 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
Eloquent Single Table Inheritance
==================================This is a very simple implementation of single table inheritance for Eloquent (Laravel & Lumen).
There are no attribute restrictions or anything that could be considered robust.
There are other libraries that do those things quite well.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).For instance, imagine you have the following table (called `people`):
| id | name | sex |
| ---|------|------|
| 1 | Fred | boy |
| 2 | Jill | girl |... and imagine you had the following classes:
```php
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.
When you fetch just boys, you will get just boys.
When you fetch just girls, you will get just girls.
UNFORTUNATELY
-------------1. You cannot make your `Person` class abstract.
2. You must specify the table on the parent
3. When creating a `hasMany` association, you must make sure you specify the foreign key. Otherwise, it will try to automatically generate one from the class name.