Laravel--三种关系

时间:2014-10-14 23:21:10

标签: php laravel-4 many-to-many relationship one-to-many

我有以下结构

Orders  
 - id  
 - users_id  
 - orderPaid (can be 1 or 0) 




OrdersItems  
 - id  
 - order_id  
 - events_id  
 - qty 


events  
- id  
- name  
- (and others)  

关系
一个订单有很多订单。一个Orderitem属于订单。
一个事件有很多Orderitems。一个Orderitem属于事件。

我需要做的是:
通过所有付费(!)数量来获取所有活动。因此,如果我有2个订单,每个订单包含两个项目(共4个)但只支付了一个订单,则数量显示= 2 而不是4

到目前为止

代码:

$events = Main::with(['clients','events.orderitems'])->where('id', $id)->first();
foreach($events->events as $events) {
    $events->orderscount = count($events->orderitems);
}  

成功地给了我总数量,但是如果orderPaid = 1

我只需要数量

我该怎么做?每一个帮助都是值得赞赏的

1 个答案:

答案 0 :(得分:3)

尝试使用Eloquent eager load constraints(这将添加子查询):

$events = Main::with(['clients', 'events.orderitems' => function($query) {
    $query->whereIn('order_id', function($query) {
        $query->select('id')->from('orders')->where('orderPaid', 1);
    });
}])->where('id', $id)->first();