【问题标题】:Laravel Data Checking in Controller With IterationLaravel 在控制器中使用迭代检查数据
【发布时间】:2018-07-31 13:42:42
【问题描述】:

我只想检查列中的每一行是否存在数据。这个想法很简单。我在 Controller 中编写了 PHP 日期迭代以与表中的日期字段匹配。

这是我的桌子:

tbl_user

-id_user

-名称

tbl_timelog

-id_user

-日期

-time_in

-超时

我的控制器:

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)?不是字段中的每个日期。

请帮忙

【问题讨论】:

    标签: php sql database laravel


    【解决方案1】:

    这是因为每次迭代都替换了前一个 .. 你能做的就是在你的控制器中 ..

    $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();
    }
    

    【讨论】:

      【解决方案2】:

      我的建议是不要使用查询洞察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'));
      }
      

      【讨论】:

        【解决方案3】:

        您需要将所有日期组成一个数组,然后通过where-clauses 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();
        

        【讨论】:

          猜你喜欢
          • 2021-12-29
          • 1970-01-01
          • 2018-03-19
          • 2017-10-03
          • 2013-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-09
          相关资源
          最近更新 更多