Laravel 4.2:如何将原始查询转换为Eloquent

时间:2015-03-12 12:17:18

标签: php mysql laravel-4 eloquent

我有一个原始查询,工作正常。

$qry ="select date(created_at) as Date,count(id) as Value from performances where date_format(created_at,'%d-%m-%Y') >= '$start_date' and date_format(created_at,'%d-%m-%Y') <= '$to_date' group by Date order by Date desc ";
    $stats = DB::select( DB::raw($qry) );
    return json_encode($stats);

我想将其转换为Eloquent

我的控制器功能是

public function postPerformanceDetails()
{
$start_date = Input::get('start_date');
$to_date = Input::get('to_date');
$start_date = date('Y-m-d',strtotime($start_date));
$to_date = date('Y-m-d',strtotime($to_date));
$stats = Performance::where('created_at', '>=', $start_date)
        ->where('created_at','<=',$to_date)
        ->groupBy('perf_date')
        ->orderBy('perf_date', 'DESC')
        ->remember(60)
        ->get([
        DB::raw('Date(created_at) as perf_date'),
        DB::raw('COUNT(id) as perf_count')
        ])
        ->toJSON();
return $stats
}

原始查询工作正常,但根据日期输入,雄辩不起作用。

我以09-03-2015格式输入数据 在数据库中格式为2015-03-09

如果我们将2015-03-09作为start_date和to_date给出,则返回空字符串。

格式有问题吗? 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

最简单的方法是将PHP中的日期转换为数据库格式。

$start_date = date('Y-m-d', strtotime($start_date));

这应该会导致您的数据库格式:2015-03-09

答案 1 :(得分:0)

我得到了@sleepless建议的答案。

这是代码。

public function postPerformanceDetails()
{
    $event = Input::get('events');
    $start_date = Input::get('start_date');
    $to_date = Input::get('to_date');
    $start_date = date('Y-m-d H:i:s',strtotime($start_date.'00:00:00'));
    $to_date = date('Y-m-d H:i:s',strtotime($to_date.'23:59:59'));
    $stats = Performance::where('created_at', '>=', $start_date)
    ->where('created_at','<=',$to_date)
    ->groupBy('perf_date')
    ->orderBy('perf_date', 'DESC')
    ->remember(60)
    ->get([
    DB::raw('Date(created_at) as perf_date'),
    DB::raw('COUNT(id) as perf_count')
    ])
    ->toJSON();
    return $stats;
}