【问题标题】:Eloquent Pivot Relationship with 2 tables具有 2 个表的 Eloquent Pivot 关系
【发布时间】:2014-12-13 04:58:43
【问题描述】:

我不确定这是否可以做到,但我有 2 个表:

parts:
id      part_number     description             multiplier  kit   type
===============================================================================
2012    ADH01-PRCD01-E  Program disc            1.00        0     3 
2013    ADH01-STHO01-E  Objectives Worksheet    1.00        0     3 
2014    ADH01-STPT01-E  Student Post-test vA    1.00        0     3 
2015    ADH01-STPT02-E  Student Post-test vB    1.00        0     3

kit_parts:
id   kit_id   part_id
======================
1    2012    2013
2    2012    2014
3    2012    2015

如果套件设置在零件表中,则需要查看套件零件以了解还包括什么。

我正在尝试弄清楚如何在 Laravel 中使用单个模型来建立这种关系。

有谁知道这是否可行?

谢谢

【问题讨论】:

    标签: mysql laravel-4 relational-database eloquent


    【解决方案1】:

    假设每个零件只属于一个套件,您可以在您的零件模型中使用kit 列上的自引用一对多关系执行此操作:

    public function kits()
    {
        return $this->hasMany('Part', 'kit', 'kit');
    }
    

    对于任何单个零件(例如,零件 #2012),您可以通过以下方式获得其套件中的所有零件:

    $kitParts = Part::find(2012)->kits;
    

    如果您需要检索关联的部分作为查询多个部分的一部分,您可以预先加载关系以避免必须为结果集中的每个部分运行套件查询:

    $parts = Part::with('kits')->get();
    

    ...因此结果集 $parts 的每个元素现在都将具有您可以访问的 kits 属性:

    foreach($parts as $part) {
        //the part
        foreach ($part->kits as $kit) {
        // the parts in this kit
        }
    }
    

    【讨论】:

      【解决方案2】:

      此解决方案有效并允许多对多关系。

          public function kitParts() {
              return $this->belongsToMany('App\Models\Parts', 'kit_parts', 'kit_id', 'part_id');
          }
          public function partKits() {
              return $this->belongsToMany('App\Models\Parts', 'kit_parts', 'part_id', 'kit_id');
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 2019-06-23
        • 1970-01-01
        • 2021-06-19
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        相关资源
        最近更新 更多