我只想检查列中的每一行是否存在数据。这个想法很简单。我在Controller中编写了PHP日期迭代,以与表中的date字段匹配。
这是我的桌子:
tbl_user
-id_user
-名称
tbl_timelog
-id_user
日期
-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)?而不是字段中的每个日期。
请帮助
答案 0 :(得分:0)
这是因为每次迭代都替换了先前的迭代..您可以在控制器中执行..
$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();
}
答案 1 :(得分:0)
我的建议是不要使用查询见解 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'));
}
答案 2 :(得分:0)