0

를 사용하여 나는 item_id 다른 테이블에서 foreign key로 테이블이 categories이라고에서 foreign keycategory_id을 가지고 items라는이 invoiceDetails라는 테이블이 있습니다.Laravel | 웅변 hasManyThrough

$result = InvoiceDetail::groupBy('item_id') 
       ->selectRaw('sum(qty) as qty, item_id')->with('item', 'category')->get(); 

하지만 오류가 점점 오전 :

나는 다음과 같은 웅변 사용하여 그렇게 할

Call to undefined relationship [category] on model [App\InvoiceDetail]. 

여기 Category 모델 안에 내 관계입니다 :

public function invoiceDetail() { 
     return $this->hasManyThrough('App\InvoiceDetail', 'App\Item', 'category_id', 'item_id'); 
} 

어떤 제안이?

+0

시도 [문서]에서 언급 한 최근의 'ID', 'ID'를 가산 (https://laravel.com/docs/5.5/eloquent-relationships#has-many-through). 예이 방법은 InvoiceDetail 모델로 작성해야합니다. 범주 모델에 포함되지 않았습니다. – rahulsm

답변

0

모든 항목에 속하는 모든 InvoiceDatail 개체를 반입하려는 경우가 아니면 여기에 hasManyThrough 관계가 필요 할지도 모릅니다. 그 부분은 당신의 질문에서 분명하지 않습니다.

그러나이 예에서는 item_id가 다른 범주로 항목을 가져옵니다.

이 기능이 작동하지 않는 이유는 존재하지 않는 InvoiceDetail 개체에서 범주 관계를 가져 오는 중입니다.

->with('item', 'category') 

당신은 InvoiceDetail 기반으로하지 않는 항목의 관계에 따라 Category를로드 할, 도트 표기법을 시도 (당신이 다른 관계를 정의했다 주어진)

->with('item.category') 

관계가 같아야합니다 이 :

class InvoiceDetail extends Model 
{ 
    public function item() 
    { 
     return $this->belongsTo(\App\Item::class); 
    } 
} 

class Item extends Model 
{ 
    public function invoiceDetails() 
    { 
     return $this->hasMany(\App\InvoiceDetail::class); 
    } 

    public function category() 
    { 
     return $this->belongsTo(\App\Category::class); 
    } 
} 

class Category extends Model 
{ 
    public function items() 
    { 
     return $this->hasMany(\App\Item::class); 
    } 


    public function invoiceDetails() 
    { 
     return $this->hasManyThrough(\App\InvoiceDetail::class, \App\Item::class, 'category_id', 'item_id'); 
    } 
} 

당신은 예를 들어,이 범주를 가지고있는 경우 hasManyThrough을 사용할 것이며, 당신은 모든 InvoiceDetails를로드 할 직접.

dd($category->invoiceDetails); 
+0

큰 답변은 점 표기법이 효과가있었습니다. 유용한 참고 자료를 찾지 못했기 때문에 'hasManyThrough'의 사용법을 명확히 설명해 주시겠습니까? – CairoCoder

+0

@CairoCoder 문서에 실제로 포함 된 아주 좋은 예가 포함되어 있습니다. https://laravel.com/docs/5.5/eloquent-relationships#has-many-through – Robert

+0

역행이 없습니다. 맞습니까? – CairoCoder