我不确定是否可以这样做,但我有两张桌子:
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中建立这种关系。
有人知道这是否可行?
感谢
答案 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');
}