簡體   English   中英

在數據庫中保存morphOne多態

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM