1

I asked a question earlier to form a query to get aggregate totals for a model in my app. It was helpfully answered but the query is quite complex - not something I envisage eloquent being suitable for. I'd like to avoid using a completely raw query to improve RDMS compaibility but I don't have much experience using the query builder in Laravel. How might I form the following in Laravel?:

SELECT payers_payments.payer_id, 
       Sum(payers_payments.amount)                             AS total_paid, 
       Sum(payers_payments.pays * payments_share.single_share) AS fair_share 
FROM   payers 
       INNER JOIN (payers_payments 
                   INNER JOIN (SELECT payment_id, 
                                      Sum(amount) / Sum(pays) AS single_share 
                               FROM   payers_payments 
                               GROUP  BY payment_id) AS payments_share 
                           ON payers_payments.payment_id = 
                              payments_share.payment_id) 
               ON payers.id = payers_payments.payer_id 
WHERE  (( ( payers.user_id ) = 1 )) 
GROUP  BY payers_payments.payer_id; 

Things to note:

  • This query is slightly different to my original question in that it includes an additional payers table as I want to limit the results to a certain user_id. Thus there is an extra join.
  • The table payments_share is a temporary table used during the query to aggregate results (I think). Can the query builder handle this?
Community
  • 1
  • 1
harryg
  • 23,311
  • 45
  • 125
  • 198
  • IMHO converting this into an eloquent based query would make it more unreadable – duellsy Mar 19 '14 at 02:19
  • I agree on the eloquent front, but can't the query builder handle this? The primary aim isn't really to make it more readable (although the query builder should anyway) but to make it more database agnostic. – harryg Mar 19 '14 at 09:01

0 Answers0