Tenho trabalhado em um aplicativo de carrinho de compras e agora cheguei ao seguinte problema.
Há um usuário, um produto e um objeto de carrinho.
- A tabela Carrinho contém apenas as seguintes colunas: "id", "user_id", "product_id" e carimbos de data / hora.
- Os carrinhos "hasMany" do UserModel (porque um usuário pode armazenar vários produtos).
- O CartModel "pertence a" um usuário e os produtos CartModel "hasMany".
Agora, para calcular o total de produtos posso apenas ligar no: Auth::user()->cart()->count()
.
Minha pergunta é: Como posso obter a SOMA () dos preços (uma coluna de produto) dos produtos no carrinho por este usuário?
Eu gostaria de fazer isso com o Eloquent e não usando uma consulta (principalmente porque acredito que é muito mais limpo).
$sum = Auth::user()->cart()->products()->sum('price');
ou qualquer que seja a coluna de preços na tabela de produtos.products->sum
implica que é a soma de chamadas em um objeto de coleção, em vez de no objeto construtor retornado por produtos (). Vale a pena esclarecer a qual você se refere aqui e, de preferência, fornecer um link para explicar os dois....->products->...
consultará o banco de dados para obter todos os produtos relacionados do modelo atual e, em seguida, trabalhará com essa coleção na memória. Usar...->products()->...
apenas modifica a consulta que está sendo construída sem executá-la até que algo semelhante->sum()
seja chamado. Este último pode ser mais eficiente, pois evita a transferência de informações desnecessárias do banco de dados para a memória.esta não é a sua resposta mas é para quem vem aqui em busca de solução para outro problema. Eu queria obter a soma de uma coluna da tabela relacionada condicionalmente. Em meu banco de dados, Deals has many Activities, eu queria obter a soma de "amount_total" da tabela Activities onde Activities.deal_id = deal.id e Activities.status = paid então fiz isso.
retorna
no atributo Ofertas.
Essa é agora a soma que eu queria não contar.
fonte
Tentei fazer algo semelhante, o que me levou muito tempo antes de descobrir a função collect (). Então você pode ter algo assim:
collect($items)->sum('amount');
Isso lhe dará a soma total de todos os itens.
fonte
collect()
collect()
é usado para enriquecer uma matriz em um objeto de coleção, mas se você não tiver uma coleção em primeiro lugar, pode ser melhor usar apenas a matriz brutaTambém usando o construtor de consulta
Para obter a soma de todo o valor da taxa dentro das taxas da tabela.
Para obter o somatório dos produtos do usuário.
fonte