Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 我想把这个问题传给拉雷维尔的雄辩者_Laravel_Eloquent - Fatal编程技术网

Laravel 我想把这个问题传给拉雷维尔的雄辩者

Laravel 我想把这个问题传给拉雷维尔的雄辩者,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

我试图用雄辩的语言提出一个问题,我试图得到所有有一个或多个广告的用户,考虑到这是一对多的关系(用户对广告)

一般来说,这个查询符合我的要求,但我不知道它是否做得很好,也不知道如何通过用户模型将其传递给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
我已经尝试了几种方法,但这些方法只会让我得到回报。 例如:

$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来使代码正常工作。但根据标准,我不知道这是否合适。