带有迭代的控制器中的Laravel数据检查

时间:2018-07-31 02:59:34

标签: php sql database laravel

我只想检查列中的每一行是否存在数据。这个想法很简单。我在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)?而不是字段中的每个日期。

请帮助

3 个答案:

答案 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)

您需要将所有日期组成一个数组,然后通过where子句whereIn()检查该数组的值 我的建议是,如果您想基于月份的开始日期和结束日期来获取结果,则避免循环 $ start = new Carbon(“本月的第一天”); $ firstDate = $ start-> format('Y-m-d'); $ end = new Carbon(“本月的最后一天”); $ 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();