【问题标题】:Use raw sql query in Laravel在 Laravel 中使用原始 sql 查询
【发布时间】:2021-12-05 08:56:09
【问题描述】:

美好的一天。我有一个已经使用 mysql 工作台测试和使用过的 sql 查询。但是,我想将它集成到我的 Laravel 应用程序中,这样我也可以在结果上使用 get() 和 paginate() 函数。 查询如下所示

SELECT applicable_areas.area
     , applicable_areas.id as id
     , count(stype) as supreme_court_cases
     , count(atype) as appeal_court_cases
  FROM applicable_areas
  JOIN (
           SELECT    1 AS atype, null AS stype, applicable_area_id, suitno FROM appeal_applicable_areas
            UNION
           SELECT null         ,    1         , applicable_area_id, suitno FROM supreme_applicable_areas
       ) AS area_types
    ON area_types.applicable_area_id = applicable_areas.id
  JOIN cp_cases_counsel
    ON cp_cases_counsel.suitno = area_types.suitno
 WHERE cp_cases_counsel.counsel_id = 38
 GROUP BY applicable_areas.id
 ORDER BY applicable_areas.area ASC;

在 Laravel 上

$practice_areas = DB::connection('mysql2')->table('applicable_areas')
        ->select(DB::raw("applicable_areas.area
        , applicable_areas.id as id
        , COUNT(stype) as supreme_court_cases
        , COUNT(atype) as appeal_court_cases
     FROM applicable_areas
     JOIN (
              SELECT    1 AS atype, null AS stype, applicable_area_id, suitno FROM appeal_applicable_areas
               UNION
              SELECT null         ,    1         , applicable_area_id, suitno FROM supreme_applicable_areas
          ) AS area_types
       ON area_types.applicable_area_id = applicable_areas.id
     JOIN cp_cases_counsel
       ON cp_cases_counsel.suitno = area_types.suitno
    WHERE cp_cases_counsel.counsel_id = 38
    GROUP BY applicable_areas.id
    ORDER BY applicable_areas.area ASC"))->get();

也试过了:

$practice_areas = DB::connection('mysql2')->table('applicable_area')
        ->join(DB::raw("SELECT 1 AS atype, null AS stype, applicable_area_id, suitno FROM appeal_applicable_areas
        UNION
       SELECT null , 1 , applicable_area_id, suitno FROM supreme_applicable_areas
   ) AS area_types"),
        function($join){
            $join->on('area_types.applicable_area_id', '=', 'applicable_areas.id');
        })
        ->join('cp_cases_counsel', 'cp_cases_counsel.suitno','=','area_types.suitno')
        ->select('applicable_areas.id as id','applicable_areas.area','count(stype) as supreme_court_cases',
        'count(atype) as appeal_court_cases')
        ->where('cp_cases_counsel.counsel_id',38)
       ->groupBy('applicable_areas.id')->get();```
I get an error with that statement. Please, is there a way to do this?
Thanks.

【问题讨论】:

  • 你遇到了什么错误?

标签: php mysql sql laravel database


【解决方案1】:

$practice_areas = DB::select("SELECT applicable_areas.area , apply_areas.id 作为 id , COUNT(stype) as Supreme_court_cases , COUNT(atype) asappeal_court_cases FROM 适用区域 加入 ( SELECT 1 AS atype,null AS stype,applicable_area_id,suitno FROM Applicable_areas 联盟 SELECT null , 1 , apply_area_id, suitno FROM Supreme_applicable_areas ) AS area_types ON area_types.applicable_area_id = apply_areas.id 加入 cp_cases_counsel ON cp_cases_counsel.suitno = area_types.suitno 哪里 cp_cases_counsel.counsel_id = 38 GROUP BY apply_areas.id ORDER BY applicable_areas.area ASC")->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 2021-07-27
    • 2013-09-27
    • 2018-10-11
    • 2016-10-03
    • 2020-11-03
    • 2019-02-03
    • 2021-01-16
    相关资源
    最近更新 更多