支持 tree 动态切换 pk 主键名称

This commit is contained in:
JaguarJack 2021-05-25 08:28:19 +08:00
parent 3bad548d10
commit 95c6059aa1
2 changed files with 36 additions and 4 deletions

View File

@ -22,7 +22,13 @@ class CatchModelCollection extends Collection
*/ */
public function toTree($pid = 0, $pidField = 'parent_id', $children = 'children'): array public function toTree($pid = 0, $pidField = 'parent_id', $children = 'children'): array
{ {
return Tree::done($this->toArray(), $pid, $pidField, $children); $pk = 'id';
if ($this->count()) {
$pk = $this->first()->getPk();
}
return Tree::setPk($pk)->done($this->toArray(), $pid, $pidField, $children);
} }

View File

@ -5,13 +5,25 @@ namespace catcher;
class Tree class Tree
{ {
public static function done(array $items, $pid = 0, $pidField = 'parent_id', $children = 'children') protected static $pk = 'id';
/**
*
* @author CatchAdmin
* @time 2021年05月25日
* @param array $items
* @param int $pid
* @param string $pidField
* @param string $children
* @return array
*/
public static function done(array $items, $pid = 0, $pidField = 'parent_id', $children = 'children'): array
{ {
$tree = []; $tree = [];
foreach ($items as $key => $item) { foreach ($items as $item) {
if ($item[$pidField] == $pid) { if ($item[$pidField] == $pid) {
$child = self::done($items, $item['id'], $pidField); $child = self::done($items, $item[self::$pk], $pidField);
if (count($child)) { if (count($child)) {
$item[$children] = $child; $item[$children] = $child;
} }
@ -22,5 +34,19 @@ class Tree
return $tree; return $tree;
} }
/**
* set pk field
*
* @author CatchAdmin
* @time 2021年05月25日
* @param string $pk
* @return $this
*/
public static function setPk(string $pk): Tree
{
self::$pk = $pk;
return new self;
}
} }