gpt4 book ai didi

php - Laravel Eloquent 中的多表继承

转载 作者:行者123 更新时间:2023-12-02 03:05:55 25 4
gpt4 key购买 nike

为了在 PDF 文档上书写,用户应该能够创建可以在多个 Documents 中重复使用的不同“模块”。 。普通模块( Module )具有属性 name, posX, posY以及例如TextModule其具有所有属性 Module有但添加 text, font, color, size 。这是您通常使用继承可以实现的目标。我发现了几种使用 Eloquent 构建单表继承的方法,但这会导致很多 NULL数据库中的值,因为所有 Module对象不会有任何 text, font, colorsize 。不幸的是,我没有找到任何 Eloquent 的多表继承文档。

这是我到目前为止所拥有的:

class Module extends Model
{
protected $fillable = [
'name', 'posX', 'posY'
];

public function document()
{
return $this->belongsTo('App\Document');
}
}

class TextModule extends Module
{
protected $fillable = [
'text', 'font', 'color', 'size'
];
}

此外,我的方法是创建两个迁移(因为我需要多表继承)并将每个公共(public)属性都放在 create_modules_table 中。迁移,而我已将每个“特殊”属性添加到 create_textmodules_table .

我的愿望是调用Module::all()检索任何类型的模块,所以 ModuleTextModule在这个例子中。对于返回集合中包含的每个对象,应该可以调用 obj->document检索相应的文档(对于 Document::hasMany(Module::class) 关系反之亦然)。目前我只收到所有Module调用 Module::all() 时的对象没有任何错误消息。

我的方法是否走错了路?

最佳答案

我建议使用嵌套集实现,而不是为模块的每个特殊情况使用单独的表。它主要用于网页上的嵌套类别,但理论上可以用于任何类型的父/子关系。看看下面的Laravel-nestedset包。

关于php - Laravel Eloquent 中的多表继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59021442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com