【问题标题】:Laravel/Eloquent Paginate returning too many pages and some emptyLaravel/Eloquent Paginate 返回太多页面和一些空页面
【发布时间】:2015-06-05 16:11:40
【问题描述】:

我有以下疑问:

return Calls::select(DB::raw("ph_n.`desc`, ph_s.StageName, Calls.PatID, Calls.CallTime, Calls.ApptDate, Calls.Name, ph.Response, Calls.Physician, r.StatusDesc, ph_s.DaysToNextStage, ph_e.ph_eventid, ph_e.EventName"))
        ->join('PopHealth as ph', function($join){
            $join->on('Calls.PatID', '=', 'ph.PatID');
            $join->on('Calls.Login', '=', 'ph.Login');
        })
        ->join('Response as r', 'ph.Response', '=', 'r.RespID')
        ->join('PopHealth_stages as ph_s', 'ph.ph_eventid', '=', 'ph_s.ph_eventid')
        ->join('PopHealth_events as ph_e', 'ph.Login', '=', 'ph_e.Login')
        ->join('PopHealth_notify as ph_n', function($join){
            $join->on('r.status', '<=', 'ph_n.RangeUpper');
            $join->on('r.status', '>=', 'ph_n.RangeLower');
        })
        ->where('Calls.Login', 'demo')
        ->distinct()->take(100)
        ->paginate(10);

它返回了 400 多个页面,并且很多页面都是空的。网上没有出现这个问题。有线索吗?

编辑:

dd(DB::getQueryLog());吐出以下SQL:

array(4) { [0]=> array(3) { ["query"]=> string(70) "select * from `PopHealth_events` where `Login` = ? and `IsDeleted` = ?" ["bindings"]=> array(2) { [0]=> string(4) "demo" [1]=> string(1) "0" } ["time"]=> float(196.17) } [1]=> array(3) { ["query"]=> string(103) "select distinct `ph_eventid`, `EventName` from `PopHealth_events` where `Login` = ? and `IsDeleted` = ?" ["bindings"]=> array(2) { [0]=> string(4) "demo" [1]=> string(1) "0" } ["time"]=> float(217.22) } [2]=> array(3) { ["query"]=> string(505) "select count(*) as aggregate from `Calls` inner join `PopHealth` as `ph` on `Calls`.`PatID` = `ph`.`PatID` and `Calls`.`Login` = `ph`.`Login` inner join `Response` as `r` on `ph`.`Response` = `r`.`RespID` inner join `PopHealth_stages` as `ph_s` on `ph`.`ph_eventid` = `ph_s`.`ph_eventid` inner join `PopHealth_events` as `ph_e` on `ph`.`Login` = `ph_e`.`Login` inner join `PopHealth_notify` as `ph_n` on `r`.`status` <= `ph_n`.`RangeUpper` and `r`.`status` >= `ph_n`.`RangeLower` where `Calls`.`Login` = ?" ["bindings"]=> array(1) { [0]=> string(4) "demo" } ["time"]=> float(192.68) } [3]=> array(3) { ["query"]=> string(694) "select distinct ph_n.`desc`, ph_s.StageName, Calls.PatID, Calls.CallTime, Calls.ApptDate, Calls.Name, ph.Response, Calls.Physician, r.StatusDesc, ph_s.DaysToNextStage, ph_e.ph_eventid, ph_e.EventName from `Calls` inner join `PopHealth` as `ph` on `Calls`.`PatID` = `ph`.`PatID` and `Calls`.`Login` = `ph`.`Login` inner join `Response` as `r` on `ph`.`Response` = `r`.`RespID` inner join `PopHealth_stages` as `ph_s` on `ph`.`ph_eventid` = `ph_s`.`ph_eventid` inner join `PopHealth_events` as `ph_e` on `ph`.`Login` = `ph_e`.`Login` inner join `PopHealth_notify` as `ph_n` on `r`.`status` <= `ph_n`.`RangeUpper` and `r`.`status` >= `ph_n`.`RangeLower` where `Calls`.`Login` = ? limit 10 offset 0" ["bindings"]=> array(1) { [0]=> string(4) "demo" } ["time"]=> float(198.18) } }

SQL 限制了结果。

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    你解决了吗?

    我面临同样的问题,我发现罪魁祸首是当 laravel 的分页查询数据库以查找元素总数时没有考虑不同,因此项目总数要大得多。

    这里有答案:Laravel 4 - paginate ignore distinct in Fluent

    总之,你得自己做分页。

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 2019-09-11
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2014-01-12
      • 2014-07-19
      相关资源
      最近更新 更多