DB查询构建器使用关系

时间:2020-03-18 09:28:52

标签: php mysql database laravel foreign-keys

我有1对多的关系。预订的组织。在预订表上,外键organization_id。组织表外键user_id。用户表中我有列名| company_account | phone_no ..

组织表

id|user_id|....

控制器查询

$bookings = DB::table('bookings')
                    ->select([
                        'organization_id', 
                        DB::raw('CAST(created_at AS DATE) as day'),
                        DB::raw("SUM(CASE WHEN payment_gateway = 'LocalBook' THEN 1 ELSE 0 END) AS bookings_localbook_per_day"),
                        DB::raw("SUM(CASE WHEN payment_gateway = 'LocalBook' THEN commision_i_get ELSE 0 END) AS commision_localbook_per_day"),
                        DB::raw("SUM(CASE WHEN payment_gateway = 'selfBook' THEN 1 ELSE 0 END) AS bookings_selfbook_per_day"),
                        DB::raw("SUM(CASE WHEN payment_gateway = 'selfBook' THEN commision_i_get ELSE 0 END) AS commision_selfbook_per_day"),

                        DB::raw("SUM(CASE WHEN payment_gateway = 'paypal' THEN 1 ELSE 0 END) AS bookings_international_per_day"),
                        DB::raw("SUM(CASE WHEN payment_gateway = 'paypal' THEN commision_i_get ELSE 0 END) AS commision_international_per_day"),
                        DB::raw('SUM(commision_i_get) AS total_comission_per_day'),
                    ])
                    ->where('pay', '>', 0)
                    ->groupBy(['organization_id', DB::raw('CAST(created_at AS DATE)')])
                    ->get()
                    ->toArray();

我想要的是这里

内部对象而不是organization_id,我需要oranization.user.name,organization.user.account ...,使用关系?我该如何实现

1 个答案:

答案 0 :(得分:1)

您可以尝试加入这3个表 试试

DB::table('bookings')
    ->join('organizations','organizations.id','=','bookings.organization_id')
    ->join('user','user.id','=','organizations.user_id')
    ->select([
                       'user.account',
                       'user.name',
                        ....])

好的做法是,您应该将表名放在每一列之前,例如user.name而不是name。 希望对您有帮助!