2014-03-13 72 views
1

我在Laravel應用程序中的兩個模型中存在關係問題。我的模型是:問題與Laravel有很多關係

class Invoice extends Eloquent { 

    protected $table = 'invoices'; 

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

} 

和:

class LineItem extends Eloquent { 

    protected $table = 'line_items'; 

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

} 

在我的控制,我取一個Invoice行下列要求:

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

但是,如果我嘗試訪問line_items財產要獲取與我的發票相關的LineItem行,我收到以下錯誤:

Invalid argument supplied for foreach()

這是爲什麼?我已經把我的型號多達按Laravel的文檔:http://laravel.com/docs/eloquent#one-to-many

+0

哪裏是'foreach'循環測試?你在表格中是否有正確的鍵/字段來建立關係? –

+0

在我的控制器和視圖中嘗試了:'foreach($ invoice-> line_items as $ line_item)'觸發錯誤。 –

+0

嘗試'dd($ invoice-> line_items)'它不是一個數組,而是一個標量值。 –

回答

7

變化

public function line_items() 

public function lineItems() 

,它會工作,在Laravel 4.1 :)

0

檢查表關係......(架構)

你FK必須lineitem_id ...你已經修改了呢? Laravel會自動配置...不要改變了...

然後,嘗試foreach循環之前

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

我想你誤會了。發票有很多LineItems,因此我的'line_items'表有一個名爲'invoice_id'的外鍵,它將它鏈接到它的父級發票行。 –

+0

我看到了。抱歉。 嘗試更改名稱,lineItems lineItems的實例() 可能碰撞..? – brunocascio

0

檢查line_items

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

而且,它不會傷害,明確提到FK,雖然laravel會自動嘗試爲你做,只要你使用適當的名字爲你的表字段。

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

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