【发布时间】:2019-11-24 19:18:21
【问题描述】:
对于在 PDF 文档上书写,用户应该能够创建可以在多个Documents 中重复使用的不同“模块”。有一些普通模块 (Module) 具有属性 name, posX, posY 和例如TextModule 具有 Module 的所有属性,但添加了 text, font, color, size。这就是您通常使用继承实现的目标。
我找到了几种使用 Eloquent 构建单表继承的方法,但这会导致数据库中有很多 NULL 值,因为所有 Module 对象都不会有任何 text, font, color 或 size。
不幸的是,我没有找到任何 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'
];
}
此外,我的方法是创建两个迁移(因为我需要多表继承)并在 create_modules_table 迁移中包含每个公共属性,而我已将每个“特殊”属性添加到 create_textmodules_table。
我希望调用Module::all() 来检索任何类型的模块,所以在这个例子中是Module 和TextModule。对于返回集合中包含的每个对象,应该可以调用obj->document 来检索相应的文档(对于Document::hasMany(Module::class) 关系,反之亦然)。
目前我只在调用Module::all() 时收到所有Module 对象而没有任何错误消息。
我的方法是否走错了路?
【问题讨论】:
标签: php laravel inheritance eloquent