我只想检查列中的每一行是否存在数据。这个想法很简单。我在Controller中编写了PHP日期迭代,以便与表中的date字段匹配。
这是我的桌子:
tbl_user
-id_user
-name
tbl_timelog
-id_user
-date
-time_in
-time_out
我的财务主任:
function PrintReport()
{
$totdays=30;
for($x=1; $x<=$totdays; $x++){
$dates="2018-05-$x";
$data_list=PrintModel::join('tbl_user','tbl_user.id_user' ,'=','tbl_timelog.id_user')->orderBy('tbl_timelog.id_user','ASC')->where('date','=',$dates)->get();
}
return view('report/index', compact('date_list'));
}如果日期找到/匹配,我想得到一些值(超时时间),那么我想将结果传递给视图。
<?php
foreach ($data_list as $value) {
echo "</br>".$value->id_user." ".$value->time_in."-".$value->time_out."
</br>";
}
?>但我不知道为什么最后一次约会(2018-05-30)才会出现在人们的视野中?不是每一次约会都会出现在字段中。
请帮帮忙
发布于 2018-07-31 03:02:00
这是因为每次迭代都取代了以前的迭代。你能做的就是在你的控制器里。
$data_list = [];
for($x=1; $x<=$totdays; $x++){
$dates="2018-05-$x";
$data_list[] = PrintModel::join('tbl_user','tbl_user.id_user' ,'=','tbl_timelog.id_user')->orderBy('tbl_timelog.id_user','ASC')->where('date','=',$dates)->get();
}发布于 2018-07-31 04:21:48
我的建议是,不要使用查询insight for循环或foreach循环
function PrintReport()
{
$totdays=30;
$dates = [];
for($x=1; $x<=$totdays; $x++){
$dates[] ="2018-05-$x";
}
$data_list= PrintModel::join('tbl_user','tbl_user.id_user' ,'=','tbl_timelog.id_user')->orderBy('tbl_timelog.id_user','ASC')->whereIn('date',$dates)->get();
return view('report/index', compact('date_list'));
}发布于 2018-07-31 05:42:42
您需要对所有日期创建一个数组,然后通过where-子句whereIn()检查数组值。
我的建议是,如果您希望根据开始日期和月结束日期获得结果,则避免循环。
$start = new Carbon('first day of this month');
$firstDate = $start->format('Y-m-d');
$end = new Carbon('last day of this month');
$lastDate = $end->format('Y-m-d');
->whereBetween('date',array($firstDate,$lastDate))如果希望获得间隔月份的结果,则使用whereMonth()和whereYear函数
->whereYear('date', $year)->whereMonth('date',$month);与您的查询
$year = '2018';$month = '5';
$data_list= PrintModel::join('tbl_user','tbl_user.id_user' ,'=','tbl_timelog.id_user')->orderBy('tbl_timelog.id_user','ASC')->whereYear('date', $year)->whereMonth('date',$month)->get();https://stackoverflow.com/questions/51604856
复制相似问题