Это, как я сделал многотабличное Наследование работы в красноречиве:
Morph над моделью наследование, наследование модели в многотабличном оказалось очень неэффективным основано на моем опыте с доктриной
Это мой morphMap конфигурация
Relation::morphMap([
2 => Flight::class,
1 => Boat::class
], false);
/* The 'false' as second parameter is to indicate Eloquent that it has to use this map and nothing else, otherwise it will merge this map with what it gets from metadata and make a mess with that. I use this ints for the types because they are FKs of the table with all the types that I use to list in a Drop Down so the user can select what he wants to create */
class Sequence{
/* Second parameter indicates the discriminator column name, that will be the column with the value indicating the type of the sublcass (1:B, 2:C) as mapped in morphMap and the third parameter indicates the key value of the sublcass (not FK_CONSTRAINT because it could be from Class B or C) */
public function sequencable()
{
return $this->morphTo("sequencable","sequencable_type_id", "sequencable_id");
}
}
Class Boat{
public function sequence(){
return $this->morphOne('Models\Sequence','sequencable');
}
}
Class Flight{
public function sequence(){
return $this->morphOne('Models\Sequence','sequencable');
}
}
Теперь, чтобы использовать это, я написал что-то вроде:
$type = 2; //You get this from the request or whatever logic you have
$sequence= new Travel\Sequence()();
$model = $sequence->sequencable()->createModelByType($type);
$model->save();
$sequence->sequencable()->associate($model);
$sequence->save();
Метод createModelByType ($ type) - полезная вещь для использования.
таблица последовательности выглядит примерно так:
//sequencable_type_id indicates the type of the sublcass
//sequencable_id indicates the type of the sublcass
{id,sequencable_type_id, sequencable_id}
Подкласс выглядит следующим образом
{id,column1, column2, etc...}
Как организован основной базы данных? У вас есть таблица основных пользователей, а затем отдельные таблицы для каждого подтипа? – alexw
Да, у меня есть главная таблица и отдельные таблицы для подтипа –