[英]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.