[英]Save morphOne polymorphic in database
使用Laravel 5,我得到了一个模块类(一个雄辩的模型)。 我想为许多类型的模块创建子类: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的示例:“名称”,“子弹”,“ x”,“ y”,“大小”和模块B应该属于页面。
实现此类的最佳方法是什么?
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()不存储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") }
如果要扩展“基本”模型/表,我建议使用Laravel的多态关系 。
您有一个基本模型/表(“名称”,“子弹”,“ x”,“ y”,“引用页面”,“引用扩展”),还有一些具有扩展数据(“ power” |“ size”) '| ...)。
保存在数据库中
公认的答案是表结构的好答案,但是要保存数据,您需要像这样进行:
$module = new Module();
$module->name = "Generator";
$module->save();
$moduleA = new ModuleA();
$moduleA->power = "120v";
$moduleA->save();
$moduleA->module()->save($module);
关于此的文档非常差。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.