我在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
行,则会收到以下错误:
为foreach()提供的参数无效
这是为什么?我根据Laravel的文档设置了我的模型:http://laravel.com/docs/eloquent#one-to-many
答案 0 :(得分:7)
更改
public function line_items()
的
public function lineItems()
它将起作用,在Laravel 4.1中测试:)
答案 1 :(得分:0)
检查你的表关系......(架构)
你的FK必须是lineitem_id ......你修改了吗? Laravel将自动配置......不要改变这个......
然后,尝试
$invoice->line_items() or $invoice->line_items in 4.1
答案 2 :(得分:0)
在line_items
循环前检查foreach
:
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');