He estado trabajando en una aplicación de carrito de compras y ahora he llegado al siguiente problema.
Hay un objeto Usuario, Producto y Carrito.
- La tabla Carrito solo contiene las siguientes columnas: "id", "user_id", "product_id" y marcas de tiempo.
- El UserModel "hasMany" Carts (porque un usuario puede almacenar varios productos).
- El CartModel "pertenece a" un usuario y CartModel "tiene muchos" productos.
Ahora para calcular el total de productos que sólo puede llamar a: Auth::user()->cart()->count()
.
Mi pregunta es: ¿Cómo puedo obtener la SUMA () de los precios (una columna de producto) de los productos en el carrito de este Usuario?
Me gustaría lograr esto con Eloquent y no usando una consulta (principalmente porque creo que es mucho más limpio).
$sum = Auth::user()->cart()->products()->sum('price');
o cualquiera que sea la columna de precios en su tabla de productos.products->sum
implica que es una suma de llamadas en un objeto de colección, en lugar de en el objeto de construcción devuelto por productos (). Vale la pena aclarar a cuál te refieres aquí, e idealmente proporcionar un enlace para explicar ambos....->products->...
consultará la base de datos para obtener todos los productos relacionados del modelo actual y luego trabajará con esa colección en memoria. Usar...->products()->...
solo modifica la consulta que se está construyendo sin ejecutarla hasta que->sum()
se llame a algo similar. Este último puede ser más eficiente, ya que evita transferir información innecesaria de la base de datos a la memoria.esta no es su respuesta, pero es para aquellos que vienen aquí buscando una solución para otro problema. Quería obtener la suma de una columna de la tabla relacionada condicionalmente. En mi base de datos, Deals tiene muchas actividades. Quería obtener la suma de "amount_total" de la tabla de actividades donde activities.deal_id = deal.id y activities.status = pagado, así que hice esto.
vuelve
en el atributo Ofertas.
Esta es ahora la suma que quería obtener, no la cuenta.
fuente
Intenté hacer algo similar, lo que me llevó mucho tiempo antes de poder descubrir la función de recopilación (). Entonces puedes tener algo de esta manera:
collect($items)->sum('amount');
Esto le dará la suma total de todos los elementos.
fuente
collect()
collect()
se usa para enriquecer una matriz en un objeto de colección, pero si no tiene una colección en primer lugar, podría ser mejor usar la matriz sin procesarTambién usando el generador de consultas
Para obtener la suma de todos los valores de las tarifas dentro de las tarifas de la tabla.
Obtener la suma de los productos de los usuarios.
fuente