0
$b->include_related('tent',NULL,TRUE,TRUE)->include_related('booking/guest',NULL,TRUE,FALSE)->include_related('booking/bookingbasis',NULL,TRUE,FALSE)->include_related('booking',NULL,TRUE,FALSE);
            $b->group_by('booking_id');
            $b->select_sum('booking_total','sum_booking_booking_total');
            $b->select_sum('booking_taxes','sum_booking_booking_taxes');
            $b->get_paged(1,1);
            $total = $b->paged->total_rows;

总共有 2 行。但是 $total 只返回 1。

另一件事是,如果我删除以下代码,它会返回 2。问题从分组开始。

$b->group_by('booking_id');
                $b->select_sum('booking_total','sum_booking_booking_total');
                $b->select_sum('booking_taxes','sum_booking_booking_taxes');

任何人都可以猜到是什么问题。

4

1 回答 1

0

我看到这是一篇旧帖子,但我面临同样的问题,并认为我至少可以提供一些意见。

如前所述,问题在于“group_by”。这是因为总结果的计数被划分为由于 group_by 而产生的组。

要获得所需的总结果,您应该执行 DISTINCT 选择。但是,这将导致返回的行集出现问题。

所以,问题是你想使用 DISTINCT 来获得正确的 paged->total_rows,但 GROUP_BY 来获得正确的对象集。

可能的解决方案

  • 打开 datamapper.php 库
  • 搜索“公共功能 get_paged”
  • 使函数以这样的方式运行,即 groupby 被转换为总计的不同选择。

代替

$total = $count_query->db->ar_distinct ? $count_query->count_distinct() : $count_query->count();

$distinct_column = 'id';
if($count_query->db->ar_groupby){
    $distinct_column = implode(",",$count_query->db->ar_groupby);
    $count_query->db->ar_distinct = TRUE;
    $count_query->db->ar_groupby = NULL;
}
$total = $count_query->db->ar_distinct ? $count_query->count_distinct(NULL, $distinct_column) : $count_query->count();

这样,groupby-field(s) 将在不同计数中使用并设置为 NULL 以在总结果中被忽略。

于 2014-06-10T13:53:28.290 回答