COALESCE in laravel

È ansible utilizzare COALESCE nella query di laravel.

$multipleitems = DB::table('votes') ->select('masterItemId',DB::raw('sum(votes) as voteSum')) ->whereBetween('voteDate',arrays($startDate,$endDate)) ->where($condition) ->groupBy('masterItemId') ->get(); 

È il mio codice e voglio get each articolo e i suoi voti totali. Se non ci sono voti voglio get '0'.

Ma nel codice precedente restituisce gli articoli che hanno alless 1 voto. C'è qualche metodo per farlo in laravel?

Bene, il PO non è stato di grande aiuto, ma lo farò un tentativo! Presumo che la tabella dei votes contenga voti effettivi espressi dagli utenti sugli articoli. Questo significa che se un elemento non ha ricevuto alcun voto, allora masterItemId object ( masterItemId ) non esiste nella tabella dei votes .

Ciò significa che la tabella dei voti deve essere lasciata unita sulla tabella degli articoli principali sul field masterItemId . masterItemId la tabella degli articoli principali: items , e presumo che abbia un field masterItemId che corrisponde al field masterItemId nella tabella dei votes . In termini SQL:

 select items.itemId, ifnull(sum(votes.votes),0) as votesSum from items left join votes on items.itemId=votes.masterItemId where votes.voteDate between ... and ... and <other conditions> group by items.itemId 

Non ho familiarità con Laravel, ma avnetworking bisogno di qualcosa di simile, tuttavia non trattare è come codice copia-incolla:

 $multipleitems = DB::table('items') ->leftJoin('votes','items.itemId','=','votes.masterItemId') ->select('items.itemId',DB::raw('ifnull(sum(votes.votes),0) as voteSum')) ->whereBetween('votes.voteDate',arrays($startDate,$endDate)) ->where($condition) ->groupBy('items.temId') ->get();