仅当值在“ B表”中存在1次以上时,才如何从“ A表”中获取结果-Laravel

时间:2018-07-03 07:54:49

标签: php mysql laravel join having

我在2张桌子之间建立联系

报告和订单项

public function items()
{
    return $this->hasMany('App\Models\Order_item', 'waybill_number', 'csv_waybill_number');
} 

这是查询中最短的部分,可以运行,但是非常慢! 如果我使用limit($ perPage)-> get()而不是paginate($ perPage)的结果要快得多,则由于-> has()的原因,如果我将其从查询中删除,paginate()会变慢,这适用于1-2秒,否则超过一分钟...

$perPage = 45;
$pagination = Report::with(['items'  =>  function($q){ 
    $q->select(['order_items.waybill_number', 'order_items.item_number']);
}])->with(['items'  =>  function($q){ 
    $q->select(['order_items.waybill_number', 'order_items.item_number']);
}])->has('items','>', 1)
->join('order_items','order_items.waybill_number','=','globeflight_report.csv_waybill_number');

$pagination = $pagination->paginate($perPage)

我尝试不使用-> has()并使用“ having inside”作为子查询:

->with(['items'  =>  function($q){ 
                $q->select(['order_items.waybill_number', 'order_items.item_number']);
                $q->having(DB::raw('COUNT(waybill_number)'),">", "1");

            }])

无论我尝试什么,而不是-> has()都不起作用,显然我做得不好。我相信,如果我使用其他方法,可以通过paginate()正常工作

0 个答案:

没有答案