通过关系ID进行收集并获得计数

时间:2018-12-12 16:40:29

标签: php laravel eloquent laravel-collection

我有项目和国家/地区模型。有很多关系。我得到一些国家的项目。结果低于

array:5 [▼
  0 => array:5 [▼
    "id" => 2
    "account_id" => 1
    "start_date" => "Jul 2012"
    "end_date" => "Aug 2013"
    "countries" => array:1 [▼
      0 => array:2 [▼
        "id" => 148
        "pivot" => array:2 [▶]
      ]
    ]
  ]
  1 => array:5 [▶]
  2 => array:5 [▶]
  3 => array:5 [▶]
  4 => array:5 [▶]
]

我不会让所有独特的国家都计数。现在,我用这种方式做到

$projects->pluck('countries')->collapse()->pluck('id')->unique()->count()

问题。我可以将pluck与嵌套的关系列一起使用,并且有更多短期解决方案吗?例如这样

$projects->pluck('countries.id')->count();

3 个答案:

答案 0 :(得分:2)

反之亦然...

Country::whereHas('projects', function ($query) {
    // $query->where(); if you want to limit the projects
})->count();

从“国家/地区”表中获取数据后,您将获得独特的国家/地区

答案 1 :(得分:2)

您可以使用此:

$projects->pluck('countries.*.id')->flatten()->unique()->count()

您不能使用:

$projects->pluck('countries.id')...

因为国家是一个数组数组。 但是您可以在这种情况下使用'countries.*.id'

答案 2 :(得分:0)

我找到了解决方案

$projects->groupBy('countries.*.id')->count();