通过laravel雄辩模型加入三个表,它们只有一个关系

时间:2016-08-05 11:54:43

标签: php mysql laravel laravel-5 eloquent

如何在Laravel Eloquent模型中加入三个表。我的表结构就像。使用raw(带有左连接的mysql)查询很容易获得所需的结果,但是可以通过Eloquent获取。

客户表

AppDelegate

订单表(有客户ID)

 id
 title
 name

小时表(具有订单ID)

  id
  customer_id

小时模型我想获得客户详细信息订单详情。现在我可以获得如下订单详情。

 id
 order_id

如何获取客户详细信息?

我尝试过如下,但没有成功

public function order()
{
    return $this->belongsTo('App\Models\Order', 'order_id', 'id'); 

} 

编辑1:

1.return $this->hasManyThrough('App\Models\Customer','App\Models\Order','customer_id','id');

2. return $this->hasManyThrough('App\Models\Customer','App\Models\Order','customer_id','order_id');

1 个答案:

答案 0 :(得分:1)

hasManyThrough 与您尝试实现的目标相反。它可以让您轻松地从客户模型中获得小时模型。

为了获得您需要的东西,您需要定义另一种方式的关系 - 从小时订单再到客户。将以下关系添加到模型中:

FLAG_UPDATE_CURRENT

通过这些关系,您应该可以使用 $ hour->订单客户数据访问订单数据 $小时 - >命令 - >客户

要记住的一件事:Eloquent提供了急切加载相关数据以避免其他查询的可能性。当您一次获取多个小时记录时,这样做是有意义的。您可以使用以下相关订单客户数据加载所有小时记录:

class Hour extends Model {
  public function order() {
    return $this->belongsTo('App\Models\Order');
  }
}

class Order extends Model {
  public function customer() {
    return $this->belongsTo('App\Models\Customer');
  }
}