繁体   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