Laravel количество запросов всего строк - PullRequest
2 голосов
/ 27 апреля 2020

У меня есть этот запрос:

$counts = DB::table('projects')
    ->join('prject_links', 'prject_links.project_id', '=', 'projects.id')
    ->join('links', 'links.id', '=', 'prject_links.link_id')
    ->join('segments', 'segments.id', '=', 'links.segment_id')
    ->join('hthree_regions', 'hthree_regions.id', '=', 'segments.hthree_id')
    ->join('areas', 'areas.id', '=', 'hthree_regions.area_id')
    ->join('zone_regions', 'zone_regions.id', '=', 'areas.zone_id')
    ->select(
        'zone_regions.id as regions',
        'areas.id as provinces',
        'hthree_regions.id as cities',
        'segments.id as segments'
    )
    ->get();

то, что я ищу в результате, выглядит примерно так:

counts => [
  regions => 20,
  provinces => 10,
  cities => 7,
  segments => 5
];

То, что я получаю в настоящее время, является сбивающим с толку результатом, например:

one

есть идеи о том, как исправить мой запрос?

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Используйте groupBy и count(distinct field), чтобы получить счетчик поля в каждом проекте:

->selectRaw(
        "CONCAT('project ', projects.id) as project, 
         COUNT(DISTINCT zone_regions.id) as regions,
         COUNT(DISTINCT areas.id) as provinces,
         COUNT(DISTINCT hthree_regions.id) as cities,
         COUNT(DISTINCT segments.id) as segments"
    )
->groupBy('projects.id')
->get();
0 голосов
/ 27 апреля 2020

Это может быть вашим решением. Запустите его и дайте мне знать, если это поможет

$counts = DB::table('projects')
    ->join('prject_links', 'prject_links.project_id', '=', 'projects.id')
    ->join('links', 'links.id', '=', 'prject_links.link_id')
    ->join('segments', 'segments.id', '=', 'links.segment_id')
    ->join('hthree_regions', 'hthree_regions.id', '=', 'segments.hthree_id')
    ->join('areas', 'areas.id', '=', 'hthree_regions.area_id')
    ->join('zone_regions', 'zone_regions.id', '=', 'areas.zone_id')
    ->groupBy('projects.id')
    ->selectRaw(
        'count(zone_regions.id) as regions',
        'count(areas.id) as provinces',
        'count(hthree_regions.id) as cities',
        'count(segments.id) as segments'
    )
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...