我需要从表中获取最新数据。我在URL中传递了日期,我使用它进行过滤。所以,我有这样的事情:
$latest = Latest::select('s_customer', 's_product', 's_starttermin')
->leftJoin('temp_cat', 'temp_cat.spotid', '=', 'mc_spots.spotid')
->where('s_active', '=', 1)
->orderBy('s_starttermin', 'desc')
->limit(50);
if (!empty(Input::get('date'))) {
$latest = $latest->where('s_starttermin', '=', Input::get('date'));
}
例如,今天我没有2017-09-28
的任何最新产品。在这种情况下,$latest
是一个空数组。最后一天是三天前。我怎样才能获取最新数据?提醒:我使用s_starttermin
...
答案 0 :(得分:2)
我创建了一个函数来调用它,直到找到我们的最新记录但要小心,如果你没有任何记录它会循环到无限,我会添加一些$opportunities
变量或者其他东西:
public function getLatest($date){
$latest = Latest::select('s_customer', 's_product', 's_starttermin')
->leftJoin('temp_cat', 'temp_cat.spotid', '=', 'mc_spots.spotid')
->where('s_active', '=', 1)->orderBy('s_starttermin', 'desc')->limit(50);
if (!empty($date)) {
$latest = $latest->where('s_starttermin', '=', Input::get('date'));
}
$latest = $latest->get();
if(empty($latest)){
return $this->getLatest(Carbon::parse($date)->subDay());
}else{
return $latest;
}
}
将Input::get('date')
$this->getLatest(Input::get('date'))
答案 1 :(得分:0)
在你的逻辑中,一切都会因你的if
条件而中断。我建议您先查询没有条件的数据集,然后根据您的逻辑从结果集文件管理器中查找相应的记录。
$all = Latest::select('s_customer', 's_product', 's_starttermin')
->leftJoin('temp_cat', 'temp_cat.spotid', '=', 'mc_spots.spotid')
->where('s_active', '=', 1)
->orderBy('s_starttermin', 'desc')
->limit(50)
->get();
$latest = $all->first(); // because you use `desc` you get the latest here.
if (!empty($date = Input::get('date'))) {
// if the `$date` is preset and it's equal to `$data->s_starttermin`, you'll get it as the latest one.
$latest = $all->filter(function($data) use ($date) {
return $data->s_starttermin == $date;
});
}
如果我在手机上格式化错误,请抱歉!
答案 2 :(得分:0)
可能这会对你有帮助..
$latest = Latest::select('s_customer', 's_product', 's_starttermin')
->leftJoin('temp_cat', 'temp_cat.spotid', '=', 'mc_spots.spotid')
->where('s_active', '=', 1)->orderBy('s_starttermin', 'desc')->take(50)->get();
if (!empty(Input::get('date'))) {
$latest = $latest->where('s_starttermin', '=', Input::get('date'))->orderBy('s_starttermin','desc')->get();
}