gpt4 book ai didi

php - 在数据库中保存 morphOne 多态

转载 作者:行者123 更新时间:2023-11-29 06:17:40 28 4
gpt4 key购买 nike

使用 Laravel 5,我得到了一个模块类(一个 Eloquent 模型)。我想为多种模块创建子类: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 的示例:'name'、'slug'、'x'、'y'、'size' 和 ModuleB 应该属于一个页面。

实现这种类的最佳方法是什么?

更新:我怎样才能将所有内容保存在 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") }

最佳答案

保存到数据库

接受的答案是表结构的好答案,但要保存数据,您需要像这样进行:

$module = new Module();
$module->name = "Generator";
$module->save();

$moduleA = new ModuleA();
$moduleA->power = "120v";
$moduleA->save();

$moduleA->module()->save($module);

这方面的文档很差。

关于php - 在数据库中保存 morphOne 多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964060/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com