将原始查询连接更改为 laravel Eloquent

Change raw query join into laravel Eloquent

我有两个模型:

$modelMain = "SearchPages"; //table_name : search_pages
$modelSites = "Site"; // table_name : sites

我最初有以下查询,只从一个模型中获取计数 $modelMain:

$records = $modelMain::
        select(DB::raw("COUNT(DISTINCT {$columnRecordedOn}) as records_count"))
        ->groupBy($columnRecordedOn, $columnSiteId)
        ->get();

现在,我需要加入第二个模型 $modelSites,table 名字是 sites,以便检查 sites 中的状态列是否为 1.

我将查询修改为:

$records = $modelMain::
    select(DB::raw("COUNT(DISTINCT {$columnRecordedOn}) as records_count"))
    ->join('sites','search_pages.site_id','=','sites.site_id') //added this
    ->where('sites.status','=','1') // and this
    ->groupBy($columnRecordedOn, $columnSiteId)
    ->get();

一切正常,但如您所见,我在 join()where() 中直接使用 table 名称 sites,我相信我必须使用型号名称。

如何将此查询转换为正确的 Laravel Eloquent?

感谢您的帮助。

您是否看过 Eloquent 中的关系,您应该在两个模型中声明关系,例如:

class SearchPages extends Eloquent {

    public function sites()
    {
    return $this->hasMany('sites');
    }

}

有关 Eloquent 和关系的更多信息,请参阅此参考资料: http://laravel.com/docs/4.2/eloquent#relationships

基本上可以使用"with"方法获取相关模型

场地模型

class Site extends Eloquent {

    public function searchpages()
    {
    return $this->hasMany('SearchPage','site_id','site_id');
    }

}

SearchPage 模型

class SearchPage extends Eloquent {

    public function site()
    {
    return $this->belongTo('Site','site_id','site_id');
    }

}

$records = SearchPage::with('site')->get();

根据您的需要

$records = SearchPage::
       select(DB::raw("COUNT(DISTINCT {$columnRecordedOn}) as records_count"))
    ->whereHas('site' => function($q){
                                        $q->where('status','1');
                                    })
    ->groupBy($columnRecordedOn, $columnSiteId)
    ->get();