我想在高级联接子句中使用多表

时间:2018-10-15 10:39:59

标签: php mysql laravel

我的查询需要帮助。我使用了带有高级连接子句的多个表,但是它显示了无效的计数,并且都具有相同的值:

$parents = DB::table('users')
            ->select('users.id','users.full_name', 'users.email', 'users.avatar', 'users.signup_date', (DB::raw('count(children.id) as children_no')), (DB::raw('count(invitations.id) as invitations_no')))
            ->leftJoin('children', function ($join) {
                $join->on('users.id', '=', 'children.userid')
                ->where('children.is_deleted', '=', 0);
            })
            ->leftJoin('invitations', function ($join) {
                $join->on('users.id', '=', 'invitations.user_id')
                ->where('invitations.is_deleted', '=', 0);
            })
            ->where('users.is_admin', '=', 0)
            ->groupBy('users.id')
            ->get();

1 个答案:

答案 0 :(得分:0)

我认为您可以通过Laravel中的基本关系+邀请和子表格中的软删除来解决此问题。

这将使您的查询复杂度降低,并获得Laravel的好处。

<?php

$users = User::where('is_admin', false)
    ->has(['invitations', 'children'])
    ->withCount(['invitations', 'children'])
    ->get();

这将不选择所有带邀请和子级的管理员。 确保在子级和邀请上具有软删除设置。 withCount将为相关关系添加一个计数。