Toninho Posted March 8, 2024 at 02:25 PM Report Share #632881 Posted March 8, 2024 at 02:25 PM Olá a todos, Calcular a media de ratings e mostrar, estou tentando assim, mas somente mostra o ultimo $reviews =DB::table('reviews') ->select('title_id','score','body','author', DB::raw('AVG(`score`) AS `votos`'))->groupBy('title_id')->get(); e no blade @foreach($reviews as $p) @if($p->title_id == $cl->id) <div class="rating"> @for($i = 0; $i < 10; $i++) <span><img src="/assets/images/star.png{{ $p->votos <= $i ? '-o' : '' }}" width="20" height="20"></span> @endfor </div> @endif sou grato por qualquer ajuda Link to comment Share on other sites More sharing options...
Ivo Vicente Posted March 8, 2024 at 05:23 PM Report Share #632886 Posted March 8, 2024 at 05:23 PM Viva, O resultado de $reviews é apenas uma linha? Tentaste fazer dd($reviews) para perceber se tens ou não dados corretos? Assim à primeira vista, eu não vejo motivo para estar mal, tirando o html no blade para a estrela, mas não é ainda a questão. Ou no template blade, se renderizares o resultado de $p->votos quantas linhas são geradas? Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Toninho Posted March 8, 2024 at 06:19 PM Author Report Share #632887 Posted March 8, 2024 at 06:19 PM (edited) Ola Ivo o que eu quero é mostrar a media de cada avaliação para $title_id Ex: title_id 45678 recebeu 3 avaliações nota 5, nota 8 e nota 8 5+8+8 / 3 = 7 dd($reviews) array(3) { [0]=> object(stdClass)#1543 (5) { ["title_id"]=> int(4181935) ["score"]=> int(10) ["body"]=> string(54) "Nota 10, super recomendo. Otimo atendimento. Delicioso" ["author"]=> string(4) "bode" ["votos"]=> string(7) "10.0000" } [1]=> object(stdClass)#1542 (5) { ["title_id"]=> int(4303671) ["score"]=> int(8) ["body"]=> string(127) "Gostei muito. Recomendo. Um bom entretimento e de quebra se algum dia algo de desse tipo acontecer, vou pra Groelândia. KKKKKK" ["author"]=> string(4) "bode" ["votos"]=> string(6) "8.0000" } [2]=> object(stdClass)#1541 (5) { ["title_id"]=> int(4356458) ["score"]=> int(10) ["body"]=> string(50) "Muito bom. Comida boa, bom atendimento. Recomendo " ["author"]=> string(5) "terra" ["votos"]=> string(7) "10.0000" } } Obrigado Edited March 8, 2024 at 06:22 PM by Toninho Link to comment Share on other sites More sharing options...
Ivo Vicente Posted March 8, 2024 at 06:58 PM Report Share #632890 Posted March 8, 2024 at 06:58 PM O dd das reviews mostra que existem pelo menos 3 resultados devolvidos pela consulta. Começa pelo básico, no template imprime o valor do atributo votos e depois constrói o resto, porque assim por alto, só vejo em falta o @endforeach Já agora, tens um if (@if($p->title_id == $cl->id) para validar o titulo, pode ser esse o motivo de só estares a ver um resultado como referes no post de abertura. Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Toninho Posted March 8, 2024 at 07:38 PM Author Report Share #632891 Posted March 8, 2024 at 07:38 PM Com groupby, mostra todos, mas somente a ultima avaliação $reviews =DB::table('reviews') ->select('title_id','score','body','author', DB::raw('AVG(`score`) AS `votos`'))->groupBy('title_id')->get(); Tirando o groupby mostra corretamente, mas somente o primeiro da tabela reviews $reviews =DB::table('reviews') ->select('title_id','score','body','author', DB::raw('AVG(`score`) AS `votos`'))->get(); Link to comment Share on other sites More sharing options...
Ivo Vicente Posted March 11, 2024 at 07:54 PM Report Share #632901 Posted March 11, 2024 at 07:54 PM O group by é necessário para fazer a média, porque sem agrupamento só devolverá uma linha da média de tudo. E pelo ultimo dd($reviews) que fizeste acima tens 3 resultados. Já fizeste a query que pretendes mesmo em SQL antes de usares o Query Builder? 1 Report Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now