Php 多态关系的Laravel左连接未给出完美结果

Php 多态关系的Laravel左连接未给出完美结果,php,laravel,left-join,Php,Laravel,Left Join,我有一对一的多态关系 customer_class_bookings id | customer_id | status | total | quantity | trader_user_id Polymorphic table (trader_job_payment) id | status | payable_id | payable_type 我的问题是 $earnings = CustomerClassBooking::where('trader_user_id', $user_i

我有一对一的多态关系

customer_class_bookings
id | customer_id | status | total | quantity | trader_user_id

Polymorphic table (trader_job_payment)
id | status | payable_id | payable_type
我的问题是

 $earnings = CustomerClassBooking::where('trader_user_id', $user_id)
            ->leftjoin('trader_job_payment', function ($q)
            {

                $q->on('trader_job_payment.payable_id', '=', 'customer_class_bookings.id');
                $q->on('trader_job_payment.payable_type', '=', \DB::raw("'" . CustomerClassBooking::class . "'"));
            })
            ->select(
                \DB::raw("SUM(IF (customer_class_bookings.status = 'Completed', customer_class_bookings.quantity, 0)) AS completed"),
                \DB::raw("SUM(IF (trader_job_payment.status = 'DISBURSED' , customer_class_bookings.total, 0)) AS earning"), //problem lies here
                \DB::raw("SUM(IF (customer_class_bookings.status = 'Accepted-Paid' , customer_class_bookings.quantity, 0)) AS pending"),
                \DB::raw("SUM(IF (customer_class_bookings.status IN ('Cancelled', 'Disputed') , customer_class_bookings.quantity, 0)) AS not_completed")
            )
            ->first();
            return $earnings;
这一切都很好,直到我们匹配
trader\u job\u payment
表中的
earnings
部分

\DB::raw("SUM(IF (trader_job_payment.status = 'DISBURSED' , customer_class_bookings.total, 0)) AS earning"),
如果条件在这种情况下总是返回false,则不会给出完美的结果。谁能告诉我这里有什么问题吗?

没有左加入的盈利结果

$earning_bookings = CustomerClassBooking::whereHas('payment', function($query){
            $query->where('status','DISBURSED');
        })->where('trader_user_id',$user_id)->sum('total');

确保有一条记录确实是
trader\u job\u payment.status='dispushed'
@TsaiKoga是的,记录是存在的。如果记录不是太大,请尝试选择
->select('trader\u job\u payment.status')
并调试它。@TsaiKoga我已经通过手动sql查询完成了,它给出了完美的结果。我想用laravel解决问题。你能发布原始sql查询吗