我想在laravel 5中建立查询

SELECT * FROM tbl WHERE updated_at IN (
   SELECT max(updated_at) FROM tbl
   WHERE created_at BETWEEN $begin_time AND $end_time
   GROUP BY ip_address)


我的代码:

$sqlStr = self::select('*')
        ->whereIn('updated_at', function($query){
                         return $query->select(self::raw('max(updated_at)'))
                             ->whereRaw('created_at >= $begin_time)
                             ->whereRaw('created_at <= $end_time)
                             ->groupBy('ip_address');
})->toSql();
var_dump(($sqlStr));die;


错误信息:


  Grammar.php第58行中的ErrorException:
  strtolower()期望参数1为字符串,给定对象


请帮我。

最佳答案

当您编写self::raw('max(updated_at)')时,生成的SELECT max(updated_at) FROM tbl已经在select命令中。以下代码将起作用:

$sqlStr = self::select('*')
    ->whereIn('updated_at', function($query) {
        $query->selectRaw('max(updated_at)')
            ->from('tbl')
            ->whereRaw('created_at >= $begin_time')
            ->whereRaw('created_at <= $end_time')
            ->groupBy('ip_address');
})->toSql();

关于mysql - 在Laravel 5中构建复杂的查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38912524/

10-11 20:21