2014-10-17 3 views
0

Я не уверен, если это может быть сделано, но у меня есть 2 таблицы:Eloquent Pivot Отношения с 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 с одной моделью.

Кто-нибудь знает, возможно ли это?

благодаря

ответ

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

Если предположить, что каждая часть будет только когда-либо принадлежать к одному комплекту, вы можете сделать это в вашей модели Части с автореферентным один-ко-многим на kit колонки:

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

Для любой отдельной части (скажем, часть # 2012), вы можете получить все детали в его комплекте с:

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

Если вам нужно получить связанные части, как часть запроса на несколько части, вы можете нетерпеливые нагрузки отношения, чтобы избежать необходимости выполнения запроса набора для каждой части в результирующем наборе:

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

.. .so каждый элемент результирующего набора $parts теперь будет иметь атрибут kits, что вы можете получить доступ к:

foreach($parts as $part) { 
    //the part 
    foreach ($part->kits as $kit) { 
    // the parts in this kit 
    } 
} 
Смежные вопросы