【问题标题】:Laravel 4 query from multiple table;Laravel 4 从多个表查询;
【发布时间】:2014-12-29 20:11:18
【问题描述】:

我有三张桌子

     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(); 

得到错误:

在非对象上调用成员函数 where()。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    假设连接和查询的其余部分有效,您只需将 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(); 
    

    【讨论】:

    • 先生。卢卡斯盖特,完美的答案。也请考虑我的回答。
    【解决方案2】:

    我把mysql查询放到:

    DB::select(DB::raw());

    喜欢

    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显示的结果。

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 2013-06-19
      • 2013-11-05
      相关资源
      最近更新 更多