Php 按关系id采集并获取计数
我有项目和国家模型。这是一种多对多的关系。我得到了一些国家的项目。结果如下Php 按关系id采集并获取计数,php,laravel,eloquent,laravel-collection,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" =
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()
问题。我可以使用Pulk和嵌套关系列,并有更多简短而好的解决方案吗??比如像这样
$projects->pluck('countries.id')->count();
或者反过来
Country::whereHas('projects', function ($query) {
// $query->where(); if you want to limit the projects
})->count();
从“国家/地区”表获取数据后,您将获得唯一的国家/地区,反之亦然
Country::whereHas('projects', function ($query) {
// $query->where(); if you want to limit the projects
})->count();
从countries(国家/地区)表获取数据后,您将获得唯一的国家/地区。您可以使用以下选项:
$projects->pluck('countries.*.id')->flatten()->unique()->count()
您不能使用:
$projects->pluck('countries.id')...
因为国家是一个数组。
但是您可以在这些情况下使用'countries.*.id'
您可以使用:
$projects->pluck('countries.*.id')->flatten()->unique()->count()
您不能使用:
$projects->pluck('countries.id')...
因为国家是一个数组。
但是您可以在这些情况下使用'countries.*.id'
我找到了这个解决方案
$projects->groupBy('countries.*.id')->count();
我找到了这个解决办法
$projects->groupBy('countries.*.id')->count();
嵌套的Pull不可能,因为它返回数组。我认为您自己的解决方案很好。@MisaGH我得到了这个解决方案
$projects->pull('countries.*.id')->collapse()->unique()->count()
但我认为还有更好的解决方案嵌套的Pull是不可能的,因为它返回数组。我认为您自己的解决方案是好的。@MisaGH我得到了这个解决方案$projects->Pull('countries.*.id')->collapse()->unique()->count()
但我认为有更多更好的解决方案您的解决方案是好的。但我使用更复杂的查询来获取这些数据。我得到它帐户->项目->国家嵌套查询。我不能更改初始查询,也不使用第二个queryOki,这不适用于这个问题,但我认为whereHas
接受多个嵌套级别的点表示法,如Account::whereHas('projects.countries',…
您的解决方案很好。但是我使用更复杂的查询来获取数据。我得到的是account->projects->countries嵌套查询。我不能更改初始查询,我也不使用第二个queryOki,不适用于这个问题,但我认为whereHas
接受多个嵌套级别的点表示法,如账户::whereHas('projects.countries'),…