【问题标题】:Issue with Laravel hasMany relationLaravel hasMany 关系的问题
【发布时间】:2014-04-18 21:46:40
【问题描述】:

我的两个模型在 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

【问题讨论】:

  • foreach 循环在哪里?您在表格中是否有适当的键/字段来建立关系?
  • 在我的控制器和视图中都试过了:foreach ($invoice->line_items as $line_item) 触发错误。
  • 试试dd($invoice->line_items) 它不是一个数组而是一个标量值。
  • 确保当前发票有line_items,尝试使用不同的ID 或尝试dd(Invoice::with('line_items')->get()) 并检查结果。
  • 如果我使用 with 关键字,它可以工作。如果我按照 Laravel 文档进行了设置,为什么没有?

标签: laravel eloquent has-many


【解决方案1】:

改变

public function line_items() 

public function lineItems()

它会工作,在 Laravel 4.1 中测试:)

【讨论】:

    【解决方案2】:

    foreach 循环之前检查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');
    

    【讨论】:

      【解决方案3】:

      检查您的表关系...(架构)

      你的 FK 必须是 lineitem_id... 你修改了这个? Laravel 会自动配置...不要更改这个...

      那么,试试

      $invoice->line_items() 或 $invoice->line_items 4.1

      【讨论】:

      • 我想你误会了。 Invoices 有很多 LineItems,因此我的 line_items 表有一个名为 invoice_id 的外键,将其链接到其父发票行。
      • 我明白了。对不起。尝试更改名称,lineItems() 的 line_items 实例可能会发生冲突.. ?
      猜你喜欢
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 2019-09-28
      • 2017-05-18
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多