Laravel 我想把这个问题传给拉雷维尔的雄辩者
我试图用雄辩的语言提出一个问题,我试图得到所有有一个或多个广告的用户,考虑到这是一对多的关系(用户对广告) 一般来说,这个查询符合我的要求,但我不知道它是否做得很好,也不知道如何通过用户模型将其传递给EloquentLaravel 我想把这个问题传给拉雷维尔的雄辩者,laravel,eloquent,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( * ) F
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
我已经尝试了几种方法,但这些方法只会让我得到回报。
例如:
$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);
无论提出什么建议,我都会非常感激。试试这个
$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();
只需使用左连接即可
$users = DB::table('users')
->leftJoin('anuncio', 'users.id', '=', 'anuncio.usuario_id')
->get();
因此,
Left Join
将只选择那些在anuncio
表中有任何匹配项的结果。这是结果:SQLSTATE[42S22]:未找到列:1054未知列“having子句”中的“total>0”(SQL:select count(*)作为用户内部加入anuncio
对用户id
=anuncio
usuario\u id
的聚合,由用户分组id
拥有total>0
=)。。。无法识别列总数,我尝试更改->having('total','>',0),但相同的错误将config/database.php中的having('total>0
)替换为以下->having('total','>','0')
更改严格值。将其设置为FalseT's works,非常感谢,但是现在我在使用paginate()时遇到了问题,你知道为什么吗?我们可以通过将别名total更改为aggregate来使代码正常工作。但根据标准,我不知道这是否合适。