实现抽象基础模型以供以后实现:
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;
}
然后实例化这个基础模型:
class Region extends AbstractNode
{
protected $fillable = [
'name', // Region name
];
public function getTitle(): string
{
return 'Region';
}
public function getAllowedChildren(): ?array
{
return null;
}
}
使用Region
class as$region = new Region();
会导致致命错误:
Undefined array key "App\Models\Region"
当我将 Region 编码为扩展 Model 而不是 AbstractNode 时,一切正常。
是否可以使用抽象模型类?
Laravel 完全支持使用抽象模型,但您必须
HasFactory
谨慎管理特征以避免工厂解析出现问题。通过明确定义工厂或谨慎管理特征的使用,您可以成功使用抽象模型类。我希望它能帮到你:
在具体类中明确定义工厂
确保正确的启动方法处理
始终
parent::boot()
在boot
抽象类的方法中调用,确保父类的启动方法逻辑被执行。记录你的抽象模型