Ở ví dụ này sẽ khá hiểu:
Đầu tiên bạn có table chứa thông tin Cha và đương nhiên 1 cha có nhiều con
Bạn thực hiện get dữ liệu của các Cha từ DB lên và mỗi cha sẽ có thông tin các con của họ.
Ở đây mình ko dùng quan hệ 1 nhiều trong DB.
Đầu tiên mình khởi tạo 1 array rỗng là array nhà
Mình thực hiện get thông tin cách cha lên
– mình foreach lấy thông tin mỗi cha và đưa vào array nhà
– cũng lúc đó mình kiếm các con của cha rồi có cho vào array nhà thuộc cha nhé
Code ví dụ:
public function show(ClusterService $cluterService,
WorkloadService $workloadService,
KubecostService $kubecostService,
$clusterName)
{
$cluster = $cluterService->getClusterByName($clusterName);
$orphanWorkloads = $workloadService->getAllOrphanWorkloadsByCluster($cluster->cluster_id);
$inefficientCosts = $kubecostService->getAllInefficientWorkloadsByCluster($cluster->cluster_id);
$monthlyCostCluster = $kubecostService->getMonthlyCostClusterfromPrometheus($cluster->kubecost_endpoint);
$namespaces = $workloadService->getNamespaceByCluster($cluster->cluster_id);
$windowQuery = '1d';
$aggregateEfficiencies = array();
foreach ($namespaces as $namespace) {
if (!in_array($namespace->namespace, config("infra.filters.namespace", null))){
$aggregateEfficiencyNamespace = $kubecostService->getEfficiencyNamespaceByNamespace($cluster->kubecost_endpoint, $windowQuery, $namespace->namespace);
$aggregateEfficiencyDeployment = $kubecostService->getEfficiencyDeloymentByNamespace($cluster->kubecost_endpoint, $windowQuery, $namespace->namespace);
$aggregateEfficiencyStatefulSet = $kubecostService->getEfficiencyStatefulSetByNamespace($cluster->kubecost_endpoint, $windowQuery, $namespace->namespace);
//push array to other_array
if (sizeof($aggregateEfficiencyNamespace) > 0) {
$aggregateEfficiencies[$namespace->namespace] = $aggregateEfficiencyNamespace[$namespace->namespace];
if ($aggregateEfficiencyNamespace[$namespace->namespace]['efficiency'] <= 0.5) {
$aggregateEfficiencies[$namespace->namespace]['statusEfficiency'] = 'danger';
}elseif ($aggregateEfficiencyNamespace[$namespace->namespace]['efficiency'] < 0.65 && $aggregateEfficiencyNamespace[$namespace->namespace]['efficiency'] > 0.5) {
$aggregateEfficiencies[$namespace->namespace]['statusEfficiency'] = 'warning';
}else {
$aggregateEfficiencies[$namespace->namespace]['statusEfficiency'] = 'success';
}
$aggregateEfficiencies[$namespace->namespace]['aggregateEfficiencyDeployments'] = $aggregateEfficiencyDeployment;
$aggregateEfficiencies[$namespace->namespace]['aggregateEfficiencyStatefulSets'] = $aggregateEfficiencyStatefulSet;
}
}
}
// echo "<pre>";
// print_r($aggregateEfficiencies);
// echo "</pre>";
// exit();
return view('cluster.show', [
'cluster' => $cluster,
'orphanWorkloads' => $orphanWorkloads,
'inefficientCosts' => $inefficientCosts,
'monthlyCostCluster' => $monthlyCostCluster,
'aggregateEfficiencies' => $aggregateEfficiencies,
]);
}