我想在laravel中将此查询传递给Eloquent

时间:2018-04-04 05:09:22

标签: laravel eloquent

我正试图以雄辩的方式进行查询,我尝试让所有拥有一个或多个广告的用户考虑到这是一对多关系(用户与广告)。

这个查询一般会做我想要的,但我不知道它是否做得好,以及如何通过用户模型将其传递给Eloquent。

 SELECT users.id, COUNT( anuncio.id ) AS  'total' FROM users 
INNER JOIN anuncio ON users.id = anuncio.usuario_id WHERE 
(SELECT COUNT( * ) FROM anuncio WHERE anuncio.usuario_id = users.id) >0 
GROUP BY users.id ORDER BY total DESC

我尝试了几种只返回Builder的方法。 例如:

$listas = new User;
        $listas = $listas->join('anuncio','users.id','=','anuncio.usuario_id');
        $listas = $listas->select(array('users.*', DB::raw('COUNT(anuncio.id) AS total')));
        $listas = $listas->where(function($query) use ($listas){
            $query->select(DB::raw('COUNT(anuncio.usuario_id)'))
                    ->where('anuncio.usuario_id','=','users.id')
                    ->groupBy('anuncio.usuario_id');
        },'>','0');
        $listas = $listas->orderBy('total','DESC')->paginate(48);

根据任何建议,我将非常感激。

2 个答案:

答案 0 :(得分:1)

试试这个

$listas = User::join('anuncio','users.id','=', 'anuncio.usuario_id')
->select('users.id',DB::raw("count(anuncio.id) as total"))
->groupby('users.id')
->having('total', '>', '0')
->orderby('total', 'desc')
->get();

答案 1 :(得分:0)

只需使用左连接即可。

$users = DB::table('users')
            ->leftJoin('anuncio', 'users.id', '=', 'anuncio.usuario_id')
            ->get();

所以Left Join只会选择anuncio表格中匹配的结果。