Laravel的问题有很多关系

时间:2014-03-13 21:01:22

标签: laravel eloquent has-many

我在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

3 个答案:

答案 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');