Laravel查询结构

时间:2015-01-18 18:42:39

标签: laravel eloquent

我是Laravel的新手,我正在尝试创建一个复杂的雄辩查询,但是我无法为我的生活找到如何做到这一点!这是使用多厂商店结构。

我有以下型号:

  

用户有很多产品
  产品有很多OrderItem
  OrderItems属于订单
  订单属于用户

用户可以拥有自己的产品,用户也可以拥有自己的订单。每个订单都有多个订单商品,每个订单商品都有一个与之关联的产品。

当我想通过传回单个订单对象来获取它时,我可以执行以下操作:

Order::with('OrderItems', 'OrderItems.Product', 'OrderItems.Product.User')
     ->whereUser_id($this->user_id)->first();

这为我提供了我需要的所有信息,但是如果我想以相反的顺序获得完全相同的信息,我怎么能这样做,例如...

User::with('Products', 'Products.OrderItem', 'Products.OrderItem.Order')
    ->where('Order.order_id', '=', 1)->get();

有人能指出我正确的方向吗?我尝试过使用DB::Raw,但显然会返回平坦的响应,而不是对象。这是目前实现这一目标的最佳方式吗?

1 个答案:

答案 0 :(得分:0)

不确定这是否是您想要的,但您可以使用with()(带闭包)和whereHas()的组合:

User::with(['Products.OrderItem.Order' => function($q){
    $q->where('Order.order_id', 1);
}])
->whereHas('Products.OrderItem.Order', function($q){
    $q->where('Order.order_id', 1);
})
->get();

with()会急切加载ID为1的订单,而whereHas会过滤掉所有没有ID为1的订单的用户。