使用Laravel 5,我得到了一个模块类(一个Eloquent模型)。我想为多种模块创建子类:moduleA,moduleB等。每个子模块都有特定的属性,主模块类有自己的通用属性。模块属于一个页面。
class Module extends Eloquent {
protected $fillable = ['name', 'slug', 'x', 'y'];
/*...*/
public function page()
{
return $this->belongsTo('App\Models\Page');
}
}
class ModuleA extends Module {
protected $fillable = ['power'];
/*...*/
}
class ModuleB extends Module {
protected $fillable = ['size'];
/*...*/
}
在数据库中,SubModules应具有所有Module属性和SubModules属性。模块B的例子:'name','slug','x','y','size'和ModuleB应归属于Page。
实现此类课程的最佳方法是什么?
更新:如何保存MySQL中的所有内容?
class Module extends Eloquent {
protected $fillable = ['name', 'slug', 'x', 'y'];
/*...*/
public function page()
{
return $this->belongsTo('App\Models\Page');
}
public function modulable()
{
return $this->morphTo();
}
}
class ModuleA extends Module {
protected $fillable = ['power'];
public function module()
{
return $this->morphOne('App\Models\Module', 'modulable');
}
}
做一个简单的$ module.save()不存储Module和ModuleA的数据(只有时间戳):
$module = new ModuleA();
$m->save(); //
> db.module_navs_collection.find();
{ "_id" : ObjectId("56a4a4c6bffebcec068b456a"), "updated_at" : ISODate("2016-01-24T10:17:42.097Z"), "created_at" : ISODate("2016-01-24T10:17:42.097Z") }
答案 0 :(得分:1)
如果你想扩展'基础'模型/表格,我建议使用Laravel的Polymorphic Relations。
你有一个基本模型/表('name','slug','x','y','ref to page','ref to extend')和其他一些扩展数据('power') | '大小' | ...)。
答案 1 :(得分:1)
保存在数据库中
接受的答案对于表格结构是好的,但要保存数据,你需要像这样继续:
$module = new Module();
$module->name = "Generator";
$module->save();
$moduleA = new ModuleA();
$moduleA->power = "120v";
$moduleA->save();
$moduleA->module()->save($module);
文档非常糟糕。