从数据库中获取最新数据

时间:2017-09-28 16:05:56

标签: php laravel

我需要从表中获取最新数据。我在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 ...

进行过滤

3 个答案:

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