如何使用laravel查询构建器中的两个表对created_at列计算行数或雄辩?

问题描述:

我有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 –

有两种方法可以解决这个问题。两者都需要一点编码。

首先你做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子句。 –