【问题标题】:how to write this query in laravel query builder?如何在 laravel 查询生成器中编写此查询?
【发布时间】:2022-01-11 15:03:23
【问题描述】:

我是 laravel 世界的新手,不知道如何编写正确的代码。 我有一个问题

SELECT c.cityname, count(distinct s.namep) as statecount FROM city c INNER JOIN patiens s on c.id = s.cityidp GROUP BY c.cityname ORDER BY statecount DESC;

这样输出查询

在我的 sql 数据库中,它可以很好地输出我想要的输出,但问题是我无法在 laravel 中实现该查询。

在那个查询中,我想知道每个城市已经被患者使用了多少。 非常感谢之前的帮助

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    由于计数,您可能需要使用原始表达式的元素 Laravel QueryBuilder

    $result = DB::table('cities c')
                 ->join('patiens s','c.id','=','s.cityidp')
                 ->select(DB::raw('c.cityname, count(distinct s.namep) as statecount'))
                 ->groupBy('c.cityname')
                 ->orderBy('statecount','desc')
                 ->get();
    

    【讨论】:

    • 感谢您的回复,在我的这样的小编辑中效果很好。 "$result = DB::table('cities') ->join('patiens', 'cities.id', '=', 'patiens.cityidp') ->select(DB::raw('cities.cityname , count(distinct patiens.namep) as statecount')) ->groupBy('cities.cityname') ->orderBy('statecount', 'desc') ->get();"
    • 给表名取别名可以用AS关键字。DB::table('cities AS c')->get(); => 从城市中选择 * 作为 c
    【解决方案2】:

    如果您有表作为模型(城市、患者)以及这两个模型之间的关系,那么理想的情况是。

    //City model
    public function patiens(){
        return $this->hasMany(Patien::class, 'cityidp');
    }
    

    比你能做到的:

    $cities = City::withCount('patiens')->get();
    

    在结果循环中:

    foreach($cities as $city){
        echo $city->cityname." -> ".$city->patiens_count."<br/>";
    }
    

    【讨论】:

    • @AntG 已经回答了我的问题,非常感谢,你也是
    猜你喜欢
    • 2018-09-28
    • 1970-01-01
    • 2013-05-30
    • 2017-11-24
    • 1970-01-01
    • 2017-06-01
    • 2019-09-08
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多