2016-11-17 81 views
4

在之前的文章中,我詢問了獲得的總數是Laravel中值的sum()。然而,當數據返回時,它只輸出總和而沒有任何通常會輸出的其他信息(例如:關係,時間戳等)。通常情況下,如果我只是把所有東西都作爲一個數字,這就不成問題。按時間戳排序彙總集合

下面是我正在重建的視覺的硬編碼示例,下面是創建它的數據。

Line Morris.JS Chart

data: [{ 
       period: '2016-04', 
       views: 2666, 
      }, { 
       period: '2016-05', 
       views: 2778, 
      }, { 
       period: '2016-06', 
       views: 4912, 
      }, { 
       period: '2016-07', 
       views: 3767, 
      }, { 
       period: '2016-08', 
       views: 6810, 
      }, { 
       period: '2016-09', 
       views: 5670, 
      }, { 
       period: '2016-10', 
       views: 4820, 
      }, { 
       period: '2016-11', 
       views: 15073, 
      }], 

所以無需編寫循環,有什麼去獲得所有帖子游客每天總和任何給定時間的最佳方式。基本上,一個用戶擁有很多帖子,每個帖子都有很多訪問者,所以下面是我如何得到它們的總和,但正如你上面看到的,我需要根據遊客表中的created_at時間戳。

return Post::where('user_id', Auth::user()->id)->withCount(['visitors' => function($query) 
     { 
      $query->where('created_at', '<=', Carbon\Carbon::now())->where('created_at', '>=', Carbon\Carbon::yesterday()); 
     }])->get()->sum('visitors_count'); 

回答

0

我解決了上面的一些輸入問題。我利用這種關係以倒退的方式獲取內容,這對我來說非常合適。下面是使用的最終功能:

public function displayPeriodOverPeriodGraphics() 
    { 
     return dd(Visitor::all()->where('posts.user_id', Auth::user()->id)->groupBy(function($query) 
     { 
      return Carbon\Carbon::parse($query->created_at)->format('d'); 
     })->map(function($total) 
     { 
      return $total->count(); 
     })); 
    } 
2

我不熟悉Laravel。所以,我可以告訴你的查詢怎麼會在MySQL寫的,也許你可以轉換:

您使用DATE()截斷一部分時間所以每一個具有相同的日期yyyy-mm-dd,那麼你就可以GROUP BY那些日子裏,共同COUNT(visitors)

您需要參數@user_id, @start_range, @end_range

請小心你如何設置@end_range。如果使用@end_range = 2016-11-17''2016-11-17 10:10:00'將超出該範圍。所以你可能應該使用2016-11-17 23:59:59

SELECT DATE(created_at), count(visitors) 
FROM posts 
WHERE user_id = @user_id 
    AND created_at BETWEEN @start_range 
         AND @end_range 
GROUP BY DATE(created_at) 
0

這樣的事情呢?

function postsPerPeriod() 
{ 
    $posts = Post::orderBy('created_at')->get()->groupBy(function ($date) { 
     return Carbon::parse($date->created_at)->format('m'); 
    }); 

    return $posts->map(function ($month) { 
     return $month->sum('visitors'); 
    })->toArray(); 
} 

它將按月份對帖子進行分組,然後統計每個月的訪問者數量並返回要發佈的月份的關聯數組。您可以通過更改傳遞給Carbon的格式參數來更改數組鍵。

+0

這將工作在正常的設置。但是,由於一個用戶通過其cookie值進行標識,因此它們存在於Visitors表中。郵政唯一的字符串是外國人,每個訪問涉及一個特定的內容。因此,一個用戶可以訪問10個頁面,每個頁面都是訪問者表中的單獨條目(代表訪問者的歷史記錄和代表創建者的統計信息)。 – montelc0

0

的基本架構存在這樣

Users: 
-id (A user owns many posts; Each post has many visitors) 
... (etc.) 

Posts: 
-id (this is not the primary identifier) 
-uuid (this is the value that matters) 
-user_id (Foreign Key) 
... (etc.) 

Visitors: 
-id 
-visitor_id 
-posts_uuid (Foreign Key) 
-created_at 
-updated_at 

所以它必須被訪問者在行爲用戶所擁有的任何後一定時間內創建。