【问题标题】:How to implement a mutli-foreign key in laravel 8如何在 laravel 8 中实现多外键
【发布时间】:2021-03-21 08:59:01
【问题描述】:

我正在从事一个需要在表(Trip、Truck、Fuel)之间实现数据库关系的项目。以下是想法:

  • 一辆卡车有很多行程
  • 每次旅行都有很多卡车
  • 每辆卡车都有与行程相关的燃料。

现在我希望使用 Eloquent 关系来解决这个问题,但被卡住了。如何获得燃料交易并将其映射到卡车和旅行?

提前致谢!

【问题讨论】:

标签: laravel eloquent


【解决方案1】:

您可以使用数据透视表

“数据透视表用于在存在多对多关系的两个表之间建立关系。”

在您的情况下,您可以使用卡车和旅行之间的多对多关系,然后像数据透视表中的列一样使用燃料。更容易

【讨论】:

    【解决方案2】:

    Eloquent 不支持开箱即用的三元关系。这是因为当正常的二元关系更合适时,通常会错误地使用三元关系。例如,我可以说Fuel 实体实际上是Truck-Trip 关系上的元数据,应该放在数据透视表上。

    如果您完全 100% 确定您的三元关系是正确需要的,那么我认为您最好的选择是制作一个单独的模型 TruckTrip 即:

    class TruckTrip extends Model {
        public function truck() {
             return $this->belongsTo(Truck::class);
        }
        public function trip() {
             return $this->belongsTo(Trip::class);
        }
        public function fuel() {
             return $this->belongsTo(Fuel::class);
        }
    }
    

    然后,您可以使用:hasManyThrough 例如

    ,而不是直接关联 Truck、Trip 和 Fuel
    class Trip extends Model {
        public function trucks() {
             return $this->hasManyThrough(Truck::class, TruckTrip::class);
        }
        public function fuel() {
             return $this->hasManyThrough(Fuel::class, TruckTrip::class);
        }
    }
    

    同样,您可以将卡车与旅行和燃料需求相关联,并将燃料需求与卡车和旅行相关联

    【讨论】:

      【解决方案3】:

      Laravel 提供多对多关系,但我更喜欢你除以两个关系。 为这个关系创建一个表,其中包含卡车的 ID 和行程的 ID,然后在卡车和这个新表之间建立一个一对多的关系,以及在行程和这个新表之间建立另一个一对多的关系。 对你来说很容易

      【讨论】:

        猜你喜欢
        • 2021-05-24
        • 2021-01-18
        • 1970-01-01
        • 2021-04-16
        • 2013-10-25
        • 2019-09-02
        • 2021-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多