2017-08-27 37 views
1

我有call_logs和jobseekers表。兩個表都有created_at列。並且在call_logs表中有jobseeker_id。如何使用laravel查詢構建器中的兩個表對created_at列計算行數或雄辯?

在Jobseeker.php

public function calllogs() 
{ 
    return $this->hasMany('App\Calllog','jobseeker_id'); 
} 

在Calllog.php

public function jobseeker() 
{ 
    return $this->belongsTo('App\Jobseeker','jobseeker_id'); 
} 

我想說明一個表像

created_at       call_logs   jobseekers       
 
----------------------------------- --------------------------------- 
 
2017-08-05        1     3 
 
2017-08-04        2     2 
 
2017-08-03        3     1 
 
2017-08-02        2     4 
 
2017-08-01        5     8 
 
         

所以,我可以跟蹤記錄,每天有多少個call_logs和多少個新求職者。 這裏是我試圖在一個表中,其工作well.But我想在一次查詢,以兩個表,

$count = DB::table('calllogs') 
     ->select('created_at', DB::raw('count(*) as calllogs')) 
     ->get(); 

它可以告訴我,像

created_at      calllogs 
 
----------------------------------- ---------- 
 
2017-08-03       2 
 
2017-08-04        3 
 
2017-08-05       8 
 
2017-08-06       6
所以,請指導我一個辦法嗎?我應該使用工會嗎?提前致謝。

+0

向我們展示您的模型和關係。 –

+0

我更新了,請檢查它,@ Don'tPanic –

回答

0

有兩種方法可以解決這個問題。兩者都需要一點編碼。

首先你做2個不同的查詢,例如做這個查詢。

$count2 = DB::table('jobseekers') 
     ->select(DB::raw('DATE(created_at) as created_at'), DB::raw('count(*) as jobseekers'))  
     ->groupBy(created_at')) 
     ->get(); 

現在您按天數對齊計數並將其顯示在表中。

其他選項是查詢每一天並計算當天calllogs和求職者的條目。

$start_date = Carbon::now()->subWeek(); 
$end_date = Carbon::now()->now(); 
$dates  = []; 

for ($date = $start_date; $date->lte($end_date); $date->addDay()) { 
    $dates[] = $date); 
} 

$counts = []; 
foreach ($dates as $date) { 
    $dateLater       = $date->copy()->addDay(); 
    $callLogs       = Calllog::whereBetween([$date, $dateLater])->count(); 
    $jobSeekers       = Jobseeker::whereBetween([$date, $dateLater])->count(); 
    $counts[ $date->format('Y-m-d') ] = [ $callLogs, $jobSeekers ]; 
} 

這裏$ counts有求職者和caldogs每天在範圍內的求職者人數。

+0

嗨兄弟,非常感謝你的細節解釋,第一個,我試過和dd($ count2),它顯示像「SQLSTATE [42000]:語法錯誤或訪問衝突:1140在沒有GROUP BY的聚合查詢中,SELECT列表的表達式#1包含非聚集列'neh_thit_app.calllogs.created_at';這與sql_mode = only_full_group_by(SQL:select'created_at',count(*)與calllogs不兼容())「 –

+0

第二個,嘗試它和dd($計數),它顯示像」(1/1)FatalThrowableError 調用成員函數副本()字符串「,我明白copy()意味着你也可以幫我再次檢查一下,再次感謝你的幫助。 –

+0

對不起,因爲沒有在真正的應用程序測試心臟應對。 使用Copy()以便Carbon實例未被修改。修改代碼以便$日期數組現在具有Carbon實例而不是字符串。 也修改第一個示例,並將其作爲created_at添加到group by子句。 –