Having with parentheses in Laravel Query Builder

eloquent, laravel, laravel-4, mysql

Solution

`having()` doesn't accept a callback, you could use `havingRaw()`

Problem

I'm migrating my application to Laravel 4, but i'm stuck in a very important query, the Raw query is that: ``` 'select m.* from vn_mensagem m' . ' INNER JOIN vn_mensagem_item i ON i.mensagem_id = m.mensagem_id ' . 'INNER JOIN vn_mensagem_destino d ON d.mensagem_id = m.mensagem_id ' . 'WHERE d.usuario_id = ' . $user->id . ' AND m.lida = 0 ' . 'AND i.data > "' . $timestamp . '" ' . 'group by d.mensagem_id ' . 'HAVING (count(i.mensagem_item_id) > 1 OR m.usuario_id != ' . $user->id . ')' . 'ORDER BY i.data DESC' ``` I tried to reproduce that query with Laravel Query Builder, and i got this: ``` $mensagens = DB::table('mensagem') ->select('mensagem.*') ->join('mensagem_item', 'mensagem.mensagem_id', '=', 'mensagem_item.mensagem_id') ->join('mensagem_destino', 'mensagem.mensagem_id', '=', 'mensagem_destino.mensagem_id') ->where('mensagem_destino.usuario_id', $user->id) ->where('lida', 0) ->where('mensagem_item.data', '>', $timestamp) ->groupBy('mensagem_destino.mensagem_id') ->having(function($query) { $query->where(DB::raw('count(mensagem_item.mensagem_item_id)'), '>', 1) ->orWhere('mensagem.usuario_id', '!=', $user->id); }) ->orderBy('mensagem_item.data', 'desc')->get(); ``` But then i got the following error: ``` {"error":{"type":"ErrorException","message":"strtolower() expects parameter 1 to be string, object given","file":"\/var\/www\/laravel\/php\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Grammar.php","line":49}} ``` How can i make a HAVING condition between parenteses in Laravel Query Builder?

Original source

Related problems