在laravel中的单变量查询中联接多变量查询

在laravel中的单变量查询中联接多变量查询,laravel,laravel-5,Laravel,Laravel 5,这是我的sql查询。我试图在单个变量中连接三个不同的变量,这将在单个查询中连接 $rData['ReportSent'] = self::select(DB::raw('count(resident_emails.id) as ReportSent'), "residents.id as resident_id", "resident_emails.id") ->join("resident_emails","resident_emails.res

这是我的sql查询。我试图在单个变量中连接三个不同的变量,这将在单个查询中连接

    $rData['ReportSent'] =  self::select(DB::raw('count(resident_emails.id) as ReportSent'), "residents.id as resident_id", "resident_emails.id")
                ->join("resident_emails","resident_emails.resident_id","=","residents.id")
                ->whereBetween('resident_emails.created_at', array($start, $end))
                ->where('residents.community_id', $communityId)
                ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
                ->where('resident_emails.mail_type', 'Wellness Profile')
                ->groupBy('resident_emails.resident_id')
                ->get()->toArray();

    $rData['ReportWithPhotoSent'] =  self::select(DB::raw('count(resident_emails.id) as ReportWithPhotoSent'), "residents.id as resident_id", "resident_emails.id")
                ->join("resident_emails","resident_emails.resident_id","=","residents.id")
                ->whereBetween('resident_emails.created_at', array($start, $end))
                ->where('residents.community_id', $communityId)
                ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
                ->where('resident_emails.mail_type', 'Wellness Profile and Photos')
                ->groupBy('resident_emails.resident_id')
                ->get()->toArray();

     $rData['MessageSent'] =  self::select(DB::raw('count(resident_emails.id) as MessageSent'), "residents.id as resident_id", "resident_emails.id")
                ->join("resident_emails","resident_emails.resident_id","=","residents.id")
                ->whereBetween('resident_emails.created_at', array($start, $end))
                ->where('residents.community_id', $communityId)
                ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
                ->where('resident_emails.mail_type', 'Message')
                ->groupBy('resident_emails.resident_id')
                ->get()->toArray();

i am tryring this 
$rData['SentMailCount'] =  self::select(DB::raw('count(resident_emails.id) as ReportWithPhotoSent'), "residents.id as resident_id",             "resident_emails.id")
            ->join("resident_emails","resident_emails.resident_id","=","residents.id")
            ->whereBetween('resident_emails.created_at', array($start, $end))
            ->where('residents.community_id', $communityId)
            ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
            ->where('resident_emails.mail_type', 'Wellness Profile and Photos')
        ->orWhere('resident_emails.mail_type', 'Wellness Profile')
        ->orWhere('resident_emails.mail_type', 'Message')
            ->groupBy('resident_emails.resident_id')
            ->get()->toArray();
但我想要健康档案计数,健康档案和照片计数,信息计数在三个不同的列上

我想在单变量的单次查询中使用它。
我试图将三个不同的变量合并到一个变量中。它将加入一个查询

我建议将邮件类型存储为一个数组,并利用
中的
。如果多个列以逗号分隔,也可以按多个列分组

    $rData['ReportSent'] =  self::select(DB::raw('count(resident_emails.id) as ReportSent'), "residents.id as resident_id", "resident_emails.id")
                ->join("resident_emails","resident_emails.resident_id","=","residents.id")
                ->whereBetween('resident_emails.created_at', array($start, $end))
                ->where('residents.community_id', $communityId)
                ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
                ->where('resident_emails.mail_type', 'Wellness Profile')
                ->groupBy('resident_emails.resident_id')
                ->get()->toArray();

    $rData['ReportWithPhotoSent'] =  self::select(DB::raw('count(resident_emails.id) as ReportWithPhotoSent'), "residents.id as resident_id", "resident_emails.id")
                ->join("resident_emails","resident_emails.resident_id","=","residents.id")
                ->whereBetween('resident_emails.created_at', array($start, $end))
                ->where('residents.community_id', $communityId)
                ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
                ->where('resident_emails.mail_type', 'Wellness Profile and Photos')
                ->groupBy('resident_emails.resident_id')
                ->get()->toArray();

     $rData['MessageSent'] =  self::select(DB::raw('count(resident_emails.id) as MessageSent'), "residents.id as resident_id", "resident_emails.id")
                ->join("resident_emails","resident_emails.resident_id","=","residents.id")
                ->whereBetween('resident_emails.created_at', array($start, $end))
                ->where('residents.community_id', $communityId)
                ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
                ->where('resident_emails.mail_type', 'Message')
                ->groupBy('resident_emails.resident_id')
                ->get()->toArray();

i am tryring this 
$rData['SentMailCount'] =  self::select(DB::raw('count(resident_emails.id) as ReportWithPhotoSent'), "residents.id as resident_id",             "resident_emails.id")
            ->join("resident_emails","resident_emails.resident_id","=","residents.id")
            ->whereBetween('resident_emails.created_at', array($start, $end))
            ->where('residents.community_id', $communityId)
            ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
            ->where('resident_emails.mail_type', 'Wellness Profile and Photos')
        ->orWhere('resident_emails.mail_type', 'Wellness Profile')
        ->orWhere('resident_emails.mail_type', 'Message')
            ->groupBy('resident_emails.resident_id')
            ->get()->toArray();
$mailTypes = ['Message', 'Wellness Profile and Photos', 'Wellness Profile'];

$allTypes = self::select(
    DB::raw('count(resident_emails.id) as MessageSent'), 
    "residents.id as resident_id", 
    "resident_emails.id"
)->join("resident_emails","resident_emails.resident_id","=","residents.id")
    ->whereBetween('resident_emails.created_at', array($start, $end))
    ->where('residents.community_id', $communityId)
    ->where('residents.care_level', 'LIKE', '%'.$carelevel.'%')
    ->whereIn('resident_emails.mail_type', $mailTypes)
    ->groupBy('resident_emails.mail_type', 'resident_emails.resident_id')
    ->get()
    ->toArray();

这将在一个查询中获得以上所有内容-不确定您希望输出数据结构是什么,因此您可能需要稍微调整一下。

到目前为止,您在单个查询中尝试了什么?检查我的更新问题很棒!真的,一位女士:)哦,对不起。泰玛希,你能帮我吗