我正在创建一个网购应用程序.我有一个技术store 的产品,例如CPU,图形处理器,键盘,鼠标等.所有这些都有共同的属性-ID,描述,名称,但也有自己的自定义属性-鼠标有dpi和键盘switch 类型等.

enter image description here

在Laravel中创建数据库和表的最佳方式是什么?

我首先try 了不继承,但当我想要通过id搜索产品时,这似乎很复杂,因为我还需要传递产品类型(表名).

解决这个问题的最佳方法是什么?

推荐答案

主模型应该如下所示:

  protected $fillable = ['productable_id', 'productable_type', 'manufacturer_id', 'model',  'price', 'description'];


public function productable(): MorphTo
{
    return $this->morphTo();
}

然后,让我们假设在GPU模型中的可填充项中添加了与主表不同的GPU属性

 protected $fillable = ['memory'];

您还需要在GPU控制器中执行以下操作:

   public function component(): MorphOne
{
    return $this->morphOne(Component::class, 'productable');
}

对于组件迁移,您应该设置像Productable_type和Productable_id这样的属性.关键是使用变形,就像其他一些 comments 所说的那样.

然后,在GPU控制器中,您的索引方法应该以如下形式开始:

 $gpus = GPU::with('component')->get();

Laravel相关问答推荐

在GitHub操作中缺少PHPStan和PHPMD输出,但在本地存在

运行NPM Prod时出现VUE问题

在Laravel Livewire中,如果一个输入基于另一个唯一的字段是唯一的,如何判断验证?

API GET 请求得到与数据库记录不同的结果

如何将用户对象绑定到中间件中的请求

Laravel 集合排序不生效

为什么 Laravel 5 会自动更新我的日期字段?

Laravel 5 如何全局设置 Cache-Control HTTP 标头?

Laravel 的 APP_ENV 变量(在 .env 文件中找到)是否有建议的值列表?

在 Laravel 5.4 中将中间件应用于除 `setup/*` 之外的所有路由

数组的旧输入?

Laravel 5 - 为包创建 Artisan 命令

Laravel Mix 生成字体到另一个目录

反向代理后面的 Laravel 路由

在 laravel 中安装 vue 3.0

Laravel 5 事件处理程序未触发

开发中的 Laravel 和视图缓存 - 无法立即看到更改

Laravel - artisan不工作

Laravel 排序集合,然后按键

错误:找不到模块 'webpack/lib/rules/DescriptionDataMatcherRulePlugin' 需要堆栈: