Me dan una mano con una query en Eloquent con laravel :(

  • Autor Autor pa3lo022
  • Fecha de inicio Fecha de inicio
P

pa3lo022

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todos, y gracias de antemano, estoy con laravel y tengo una funcionalidad que me esta volviendo loco.
Tengo un listado de servicios en una tabla y en otra tabla tengo el listado de comentarios de cada servicio, necesito poner en el listado de servicios (donde se muestran todos los servicios) la cantidad de comentarios que tuvieron cada uno, pero no puedo, bah no se como diferenciar cada uno de los servicios.

Muchas gracias

saludos
 
cada comentario debe estar asociado a un servicio a traves de un PK, simplemente haces un count a cada servicio por medio de su id
 
cada comentario debe estar asociado a un servicio a traves de un PK, simplemente haces un count a cada servicio por medio de su id
Tiene una relacion la tabla de servicios con la de los comentarios. Pero el problema es que no puedo diferenciar cada uno de los servicios con un count()
 
Tiene una relacion la tabla de servicios con la de los comentarios. Pero el problema es que no puedo diferenciar cada uno de los servicios con un count()

quieres una lista de todos los servicios y al costado sus comentarios?
 
quieres una lista de todos los servicios y al costado sus comentarios?
Claro yo tengo el listado de servicios, y ahi donde dice feedback deberia contarme cuantos feedback tuvo cada servicio, no se si me explico?
2021-04-06_19h43_25.webp
 
en sql serial algo asi:

select id_servicio, nombre_servicio, ( SELECT COUNT(*) FROM comentarios_servicios WHERE fk_id_servicio = servicios.id_servicio ) as cantidad_comentarios from servicios

algo asi..... lo escribí directamente aqui en la caja de comentarios....

saludos.!
 
en sql serial algo asi:

select id_servicio, nombre_servicio, ( SELECT COUNT(*) FROM comentarios_servicios WHERE fk_id_servicio = servicios.id_servicio ) as cantidad_comentarios from servicios

algo asi..... lo escribí directamente aqui en la caja de comentarios....

saludos.!
si si esta bien, te entendi. Estoy pensando que deberia ponerle un foreach a esa consulta para que me cuente cada uno de los servicio del listado.... podria funcionar 🙂

lo voy a probar, muchas gracias
 
Si puedes mostrar tus modelos, fácilmente te podriamos asesorar mejor.

Suponiendo que tienes tus relaciones correctamente podrías usar el método withCount() de eloquent:

PHP:
$services = Service::withCount('comments')->get();
// Loop de los servicios
foreach ($services as $service) {
    // Cantidad de comentarios de cada servicio
    echo $service->comments_count;
}

Saludos y suerte 🥳
 
con la query que te compartí no es necesario usar un foreach..... porque internamente el SELECT hace un foreach..

Por eso la query que escribí te lista el servicio con la cantidad de comentarios correspondientes...
 
Acá te hice el ejemplo en SQL Server....


1617750322283.webp
 
¿Las quieres mostrar en una vista? Es bastente sencillo gracias a laravel, no hay que ponerse a pensar mucho.
Yo aprendí con este sujeto: https://bluuweb.github.io/tutorial-laravel/

public function funcionservicio(){

$servicios = App\service::all();
$comentarios = App\comment::all();
return view('service', compact('servicios','comentarios'));
}

Luego con un for imprimes en la vista

Si hay relación, también hay otras formas de hacerlo.
 
Tengo una seccion de categorias, subcategorias y servicios, asi lo solucione:

PHP:
  $servicesCount = $capsule->table('discounts_services')
    ->join('discounts_categories','discounts_categories.categoriesId','=','discounts_services.categoriesId')
    ->select(Capsule::connection()->raw('count(discounts_services.servicesId) as totalServices'))
    ->OrderBy('discounts_categories.categoriesOrder')
    ->groupBy('discounts_services.categoriesId')
    ->get();

Y asi, puedes usar en tu view:

PHP:
  $servicesCount[$categoriesId]->totalServices

Espero te sirva.
 
Atrás
Arriba