2014-12-29 212 views
0

我有三个表Laravel 4查询多个表;

 DGRS TABLE      SPVS TABLE   LOCS TABLE 
    ------------------    ------------  --------------------- 
    dgr_date      sid (PK)   mloc (PK) 
    mc_loc (fk:locs:mloc)   sname    spid (fk:spvs:sid) 
    ws        state 
    daily_gen 

MySQL查询成功返回结果:

select spvs.sname, sum(dgrs.daily_gen) 
from spvs, dgrs, locs 
where spvs.sid=locs.spid and locs.mloc=dgrs.mc_loc and dgrs.dgr_date='2008-04-01' 
group by dgrs.dgr_date, spvs.sname; 

型号

class Dgr extends \Eloquent { 

    public function loc(){ 

     return $this->belongsTo('Loc'); 

    } 
    public function spv(){ 

     return $this->belongsTo('Spv'); 

    } 

} 

class Loc extends \Eloquent { 

    public function dgr(){ 

     return $this->hasMany('Dgr'); 
    } 

} 


class Spv extends \Eloquent { 

    public function spv(){ 

     return $this->hasMany('Loc'); 
    } 

} 

如何编写MySQL查询到Laravel?请建议。

我试图像这样:

$dgrs=DB::table('dgrs') 

         ->join('locs', 'locs.mloc', '=', 'dgrs.mc_loc') 
         ->join('spvs', 'spvs.sid', '=', 'locs.spid') 
         ->select('spvs.sname') 
         ->sum('dgrs.daily_gen') 
         ->where('dgr_date', '=','2008-04-01') 
         ->groupBy('dgr_date', 'spvs.sname') 
         ->get(); 

获取错误:

呼叫到非对象的成员函数,其中()。

回答

0

假设您的查询的连接和其余部分起作用,您只需将sum()部分移动到select()并使用DB::raw(),以便将其解释为SQL函数。

$dgrs=DB::table('dgrs') 
     ->join('locs', 'locs.mloc', '=', 'dgrs.mc_loc') 
     ->join('spvs', 'spvs.sid', '=', 'locs.spid') 
     ->select('spvs.sname', DB::raw('SUM(dgrs.daily_gen)')) 
     ->where('dgr_date', '=','2008-04-01') 
     ->groupBy('dgr_date', 'spvs.sname') 
     ->get(); 
+0

lukasgeiter先生,完美的答案。请考虑我的答案。 – NKR

0

我把MySQL查询到:

DB ::选择(DB ::原始());

DB::select(DB::raw("select spvs.sname, sum(dgrs.daily_gen) from spvs, dgrs, locs 
       where spvs.sid=locs.spid and locs.mloc=dgrs.mc_loc and dgrs.dgr_date='2008-04-01' 
       group by dgrs.dgr_date, spvs.sname")); 

而且它产生的结果通过MySQL作为显示。