2014-03-13 4 views
1

Laravel 응용 프로그램에서 두 모델의 관계에 문제가 있습니다. 내 모델은 다음과 같습니다Laravel hasMany 관계 문제

class Invoice extends Eloquent { 

    protected $table = 'invoices'; 

    public function line_items() 
    { 
     return $this->hasMany('LineItem'); 
    } 

} 

그리고 : 나는 시도하는 경우에, 그러나

$invoice = Invoice::find($id); 

을하고 line_items 속성에 액세스 : 내 컨트롤러에서

class LineItem extends Eloquent { 

    protected $table = 'line_items'; 

    public function invoice() 
    { 
     return $this->belongsTo('Invoice'); 
    } 

} 

, 나는 다음과 함께 Invoice 행을 인출 송장과 관련하여 LineItem 행을 가져 오려면 다음 오류가 발생합니다.

Invalid argument supplied for foreach()

왜 그렇습니까? 내가 Laravel의 설명서에 따라 내 모델을 설정 한 : http://laravel.com/docs/eloquent#one-to-many

+0

Laravel 4.1에서 테스트

public function lineItems() 

하고 작동에 대한

public function line_items() 

? 관계를 만들기 위해 테이블에 적절한 키/필드가 있습니까? –

+0

내 컨트롤러와 뷰에서 모두 시도 :'foreach ($ invoice-> line_items $ line_item)'오류를 트리거합니다. –

+0

배열이 아니라 스칼라 값인'dd ($ invoice-> line_items)'을 시도해보십시오. –

답변

7

변화`foreach` 루프입니다 :)

0

이 테이블 관계를 확인 (스키마)

귀하의 FK가 lineitem_id해야 ... 당신은이를 수정? Laravel이 변경하지 마십시오 ... 자동으로 구성합니다 ...

을 다음, foreach 루프 전에 line_items에 대한

$invoice->line_items() or $invoice->line_items in 4.1
+0

당신이 오해했다고 생각합니다. 송장에는 많은 LineItem이 있으므로,'line_items' 테이블에 상위 송장 행을 연결하는'invoice_id '라는 외래 키가 있습니다. –

+0

나는 본다. 죄송합니다. 이름 변경, line_items lineItems 인스턴스 ( ) 충돌 가능성이 있습니까? – brunocascio

0

확인하십시오 :

if(! $invoice->line_items->isEmpty()){ 
    foreach($invoice->line_items as $line_item){ 
     //do stuff 
    } 
} 

을 또한, 그것은하지 않습니다 명시 적으로 FK를 언급하는 것은 상처를줍니다. 그러나 laravel은 자동으로 테이블 필드에 적절한 이름을 사용하면 FK를 자동으로 시도합니다.

//Invoice Model 
return $this->hasMany('LineItem', 'invoice_id'); 

//LineItem Model 
return $this->belongsTo('Invoice', 'invoice_id');