Laravel多对一的关系

时间:2017-03-31 14:40:16

标签: laravel eloquent

我有两张桌子:

orders
-id
-status_id

status
-id
-label

关系是:

任何订单都有一个状态

public function status()
{
    return $this->hasOne('App\Status');
}

任何状态都可以属于多个订单

public function orders()
{
    return $this->belongsToMany('App\Order');
}

我认为这是正确的吗?

现在,如果我使用:

    $o = Status::with('orders')->get();

我收到了所有订单。 如果我使用:

    $o = Order::with('status')->get();

我收到错误! 未找到列:1054未知列' status.order_id'在' where子句' (SQL:select {from status statusorder_id in(1,2,3,4,5)) 但是我没有status.order_id,而是我有order.status_id。

如何获得订单状态的标签?喜欢 order-> status->标签

1 个答案:

答案 0 :(得分:2)

您必须使用hasMany作为一对多关系。您的订单功能应该是这样的:

public function orders()
{
    return $this->hasMany('App\Order');
}

status的功能应为belongsTo

public function status()
{
    return $this->belongsTo('App\Status');
}

belongsToMany用于与数据透视表的多对多关系。