【问题标题】:The best solution for table relation in laravellaravel中表关系的最佳解决方案
【发布时间】:2021-08-04 13:28:45
【问题描述】:

我正在使用 Laravel 开发一个平台,在连接多个表之间时遇到了问题。这些表如下:

  1. 订购
  2. 服务领域
  3. 服务字段值

每个订单有多个服务字段,每个服务字段对应多个订单。(服务字段与订单关系n=>n) 服务与服务值的关系 1=>n ,每个字段服务字段有多个服务值。

订购模式:

public function serviceFields()
{
    return $this->hasMany(ServiceFields::class);
}

服务领域模型:

public function orders()
{
    return $this->hasMany(Order::class);
}

public function ServicebFieldValue()
{
    return $this->hasMany(ServiceFieldValue::class);
}

服务领域价值模型:

public function serviceField()
{
    return $this->belongsTo(ServiceFields::class);
}

对于每个订单,必须存储几个服务字段,有一个多对多的中间表,我没有存储订单的服务字段值的解决方案,这个服务字段值应该存储在哪里以及什么关系的类型应该是什么?

【问题讨论】:

  • N:N/多对多关系需要在两个模型上定义 belongsToMany 关系,并且必须有一个数据透视表 (@​​987654326@) 连接这两个表,orders 和 @ 987654328@。 laravel.com/docs/8.x/eloquent-relationships#many-to-many
  • 感谢回复 我无法存储服务字段值 我需要添加表格来存储服务字段值吗?

标签: php database laravel eloquent


【解决方案1】:

如果我没记错的话,这里有 2 个可能的选项,第一个我认为在你的情况下可能是最简单的,如果使用有很多直通关系,如下所示:

订单通过服务值具有许多服务字段值 - 您的数据库中将需要其他字段,请查看有关如何实现该目标的文档,如果您仍然不知道,请告诉我https://laravel.com/docs/8.x/eloquent-relationships#has-many-through

另外,这是多态关系的一个很好的候选者,其中服务字段可以通过数据透视表成为许多订单的一部分,在您的情况下,它被称为 service_fielable(类似的东西),其中包含 order_id、service_fieldable_id(服务字段 id)和一个类型——它实际上是一个服务字段类的字符串

这里是多态关系的文档: https://laravel.com/docs/8.x/eloquent-relationships#many-to-many-polymorphic-relations

那么显然你需要将服务字段值连接到服务字段vis有很多(一对多)关系所以 - 服务字段有很多服务字段值并且服务字段值属于服务字段

希望这一切都有意义,如果有任何问题,请告诉我,我将设置开发环境并尝试为您编写代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 2013-06-11
    • 2015-07-16
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2013-10-19
    相关资源
    最近更新 更多