如何使用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
有两种方法可以解决这个问题。两者都需要一点编码。
首先你做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每天在范围内的求职者人数。
嗨兄弟,非常感谢你的细节解释,第一个,我试过和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不兼容())“ –
第二个,尝试它和dd($计数),它显示像”(1/1)FatalThrowableError 调用成员函数副本()字符串“,我明白copy()意味着你也可以帮我再次检查一下,再次感谢你的帮助。 –
对不起,因为没有在真正的应用程序测试心脏应对。 使用Copy()以便Carbon实例未被修改。修改代码以便$日期数组现在具有Carbon实例而不是字符串。 也修改第一个示例,并将其作为created_at添加到group by子句。 –
向我们展示您的模型和关系。 –
我更新了,请检查它,@ Don'tPanic –