2016-04-07 22 views
0

Ben laravel 5,2laravel alt sorgu

SELECT b.id, 
     TotalP, 
     b.booking_amount 
FROM booking b 
LEFT JOIN 
    (SELECT sum(amount) AS TotalP, 
      booking_id 
    FROM payment 
    GROUP BY booking_id) AS T ON b.id = T.booking_id 
WHERE COALESCE(TotalP, 0) < b.booking_amount 

Benim Soru bu yazı ile ilgilidir, bu sorguyu yazmak istiyorum. Ben arama ve çalıştıktan sonra bir sorgu yazdım ama bu

$result = DB::table('my_booking') 
     ->select('booking_name') 
     ->leftJoin(DB::raw('(SELECT booking_id,sum(amount) as TotalP FROM `my_payment` GROUP BY booking_id) TotalPayment'), function($join) 
     { 
      $join->on('my_booking.id', '=', 'TotalPayment.booking_id'); 
     }) 
     ->get(); 

Sql query to get data diffrence of total in 2 tables

cevap

1

Bu deneyebilirsiniz,

$booking_payments = Booking::with('Payment')->find(1); 

$total = 0; 
foreach($booking_payments->payment as $booking_payment){ 
$total += $booking_payment->amount; 
} 

if($booking_payments->booking_amount == $total){ 
// if the total and booking_amount is equal 
} 
1

Bu laravel çalışmak ve seni vermelidir fazla kısıtlamayı çalışma ve gerek olmadığı MySQL sorgunuzla aynı sonucu. COURCECE'i alt sorgu seçim alanına taşıdım, böylece Laravel'de deyim olan ham bir DB yazmanız gerekmiyor.

$sql_subquery = "(SELECT COALESCE(SUM(amount),0) AS TotalP, 
          booking_id 
        FROM payment 
        GROUP BY booking_id) AS T"; 


$result = DB::table('booking AS b') 
      ->leftJoin(DB::raw($sql_subquery), 'b.id', '=', 'T.booking_id') 
      ->where('T.TotalP','<', 'b.booking_amount') 
      ->select('b.id','T.TotalP','b.booking_amount') 
      ->get();