与2张桌子的雄辩枢纽关系

时间:2014-10-17 15:02:20

标签: mysql laravel-4 relational-database eloquent

我不确定是否可以这样做,但我有两张桌子:

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中建立这种关系。

有人知道这是否可行?

感谢

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

此解决方案可以工作并允许多对多的关系。

    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');
    }