updates
This commit is contained in:
+36
-1
@@ -16,6 +16,7 @@ final class Graph
|
||||
public function __construct(
|
||||
public Collection $records,
|
||||
public Collection $edges,
|
||||
public Collection $parentEdges,
|
||||
public ?int $total = null,
|
||||
)
|
||||
{
|
||||
@@ -66,6 +67,15 @@ final class Graph
|
||||
|
||||
public function tree(): Collection
|
||||
{
|
||||
return $this->getRootRecords()
|
||||
->map([$this, 'findParents'])
|
||||
->map([$this, 'findChildren'])
|
||||
;
|
||||
|
||||
return $rootRecords;
|
||||
|
||||
|
||||
|
||||
return $this->records->filter(function (QueryRecord $record) {
|
||||
return $this->edges->filter(fn(Edge $ed) => $ed->target == $record->id)->isEmpty();
|
||||
})->values()
|
||||
@@ -81,7 +91,6 @@ final class Graph
|
||||
foreach ($recordEdges as $element) {
|
||||
$groupRecordEdges[$element->field][] = $element;
|
||||
}
|
||||
|
||||
$children = [];
|
||||
foreach ($groupRecordEdges as $field => $edges) {
|
||||
|
||||
@@ -99,4 +108,30 @@ final class Graph
|
||||
return $record;
|
||||
}
|
||||
|
||||
|
||||
public function findParents(QueryRecord $record): QueryRecord
|
||||
{
|
||||
$recordEdges = $this->parentEdges->filter(fn(Edge $ed) => $ed->target === $record->id)->values()->sort(fn($a, $b) => $a->rank <=> $b->rank)->values();
|
||||
|
||||
$groupRecordEdges = [];
|
||||
foreach ($recordEdges as $element) {
|
||||
$groupRecordEdges[$element->field][] = $element;
|
||||
}
|
||||
$parents = [];
|
||||
foreach ($groupRecordEdges as $field => $edges) {
|
||||
|
||||
$parents[$field] = [];
|
||||
foreach ($edges as $anEdge) {
|
||||
$aRecord = $this->records->filter(fn(QueryRecord $rec) => $rec->id == $anEdge->source)->values();
|
||||
if (empty($aRecord[0])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$parents[$field][] = $this->findParents($aRecord[0]);
|
||||
}
|
||||
}
|
||||
$record->_parents = $parents;
|
||||
return $record;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user