Implemente o modelo base abstrato para realizações posteriores:
abstract class AbstractNode extends Model
{
use HasFactory;
protected static function boot(): void
{
static::creating(static function (self $model) {
//
});
static::deleting(static function (self $model) {
//
});
}
abstract public function getTitle(): string;
abstract public function getAllowedChildren(): ?array;
}
em seguida, instancie este modelo base:
class Region extends AbstractNode
{
protected $fillable = [
'name', // Region name
];
public function getTitle(): string
{
return 'Region';
}
public function getAllowedChildren(): ?array
{
return null;
}
}
O uso da Region
classe as $region = new Region();
termina com erro fatal:
Undefined array key "App\Models\Region"
Quando codifico a região como modelo estendido, não como AbstractNode - tudo bem.
É possível usar classes de modelos abstratos?
O uso de modelos abstratos no Laravel é totalmente suportado, mas você deve gerenciar as características com
HasFactory
cuidado para evitar problemas com a resolução de fábrica. Ao definir explicitamente a fábrica ou gerenciar cuidadosamente o uso de características, você pode usar classes de modelo abstrato com sucesso.Espero que ajude você:
Definir explicitamente fábrica em classes concretas
Garanta o manuseio adequado do método de inicialização
Sempre chame
parent::boot()
oboot
método da classe abstrata para garantir que a lógica do método de inicialização do pai seja executada.Documente seu modelo abstrato