where(["status" => 1]) ->orderBy("sort asc,id asc") ->all(); return self::getDictionaryObjData($info); } /** * @return DictionaryObj[] */ public static function getDictionaryObjAllData(): array { $info = Dictionary::find() ->orderBy("sort asc,id asc") ->all(); return self::getDictionaryObjData($info); } /** * @param $info * @return DictionaryObj[] */ protected static function getDictionaryObjData($info): array { $data = []; $objList = []; $relationshipIds = []; $relationshipList = DictionaryRelationship::find()->all(); foreach ($relationshipList as $relationship) { /** @var DictionaryRelationship $relationship */ $relationshipIds[$relationship->dictionary_id][] = $relationship->relation_id; } foreach ($info as $value) { /** @var Dictionary $value */ $obj = new DictionaryObj($value->id, $value->pid, $value->name, $value->status, $value->multiple, $value->has_children, $value->can_change, $value->can_children, $value->can_multiple, $value->sort); $objList[$obj->getId()] = $obj; if ($value->has_children > 0) { $data[] = $obj; } } foreach ($objList as $key => $obj) { if ($obj->getPid() > 0) { if (isset($objList[$obj->getPid()])) { $objList[$obj->getPid()]->addChildrenToTop($obj); } } if (isset($relationshipIds[$key])) { foreach ($relationshipIds[$key] as $id) { if (isset($objList[$id])) { $obj->addDeriveToBottom(new DeriveObj($id)); } } } } return $data; } }