首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带迭代控制器的Laravel数据校验

带迭代控制器的Laravel数据校验
EN

Stack Overflow用户
提问于 2018-07-31 02:59:33
回答 3查看 131关注 0票数 0

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

这是我的桌子:

tbl_user

-id_user

-name

tbl_timelog

-id_user

-date

-time_in

-time_out

我的财务主任:

代码语言:javascript
复制
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'));
}

如果日期找到/匹配,我想得到一些值(超时时间),那么我想将结果传递给视图。

代码语言:javascript
复制
<?php
foreach ($data_list as $value) {
echo "</br>".$value->id_user." ".$value->time_in."-".$value->time_out." 
</br>";
}
?>

但我不知道为什么最后一次约会(2018-05-30)才会出现在人们的视野中?不是每一次约会都会出现在字段中。

请帮帮忙

EN

回答 3

Stack Overflow用户

发布于 2018-07-31 03:02:00

这是因为每次迭代都取代了以前的迭代。你能做的就是在你的控制器里。

代码语言:javascript
复制
$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();
}
票数 0
EN

Stack Overflow用户

发布于 2018-07-31 04:21:48

我的建议是,不要使用查询insight for循环foreach循环

代码语言:javascript
复制
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'));
}
票数 0
EN

Stack Overflow用户

发布于 2018-07-31 05:42:42

您需要对所有日期创建一个数组,然后通过where-子句whereIn()检查数组值。

我的建议是,如果您希望根据开始日期和月结束日期获得结果,则避免循环。

代码语言:javascript
复制
$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函数

代码语言:javascript
复制
->whereYear('date', $year)->whereMonth('date',$month);

与您的查询

代码语言:javascript
复制
$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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51604856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档