使用Laravel 5,我得到了一个模块类(一个Eloquent模型)。我想为许多类型的模块创建子类:moduleA,moduleB等。每个子模块都有特定的属性和主模块类自己的通用属性。一个模块属于一个页面。在数据库中保存morphOne多态
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'];
/*...*/
}
在数据库中,子模块应具有所有模块属性和子模块属性。模块B的例子:'name','slug','x','y','size'和ModuleB应该属于一个Page。
实现这种类的最好方法是什么?
Updade:我该如何保存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()不存储模块和ModuleA的DATAS(只时间戳):
$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") }
它的工作原理!但是模块表是空的吗?只有ModuleA表填充所有数据(我正在使用mongodb) – Ludovic
要解决保存问题,请看下面的答案 – Ludovic