我正在通过Active Record
寻找解决方案来获取单个查询中的分层数据。Yii2中的螺纹数据
我现在正在做的是首先获取所有数据,然后将数组转换为具有递归函数的所需数组。
$allUsers = User::find()
->asArray()
->all();
$arr = Yii::$app->TreeComponent->getUserChildren($allUsers, $userId, $userId);
和TreeComponent
public function getUserChildren($src_arr, $currentId, $userId, $parentFound = false)
{
$cats = array();
foreach ($src_arr as $row) {
if ($row['id'] == $userId) {
$row['parent'] = "";
}
if ((!$parentFound && $row['id'] == $currentId) || $row['parent'] == $currentId) {
$rowData = array();
foreach ($row as $k => $v)
$rowData[$k] = $v;
$cats[] = $rowData;
if ($row['parent'] == $currentId) {
$cats = array_merge($cats, $this->fetchRecursive($src_arr, $row['id'], true));
}
}
}
return $cats;
}
其工作的罚款。但最近我通过CakePHP的find('threaded'),我认为它会节省递归函数的执行时间和更少的代码。
我很好奇Active Record是否还有其他功能。
没有这方面的功能,但你可能想使用[嵌套列表](https://github.com/creocoder/yii2-nested-sets)。 – Beowulfenator
Yii的AR无法在单次调用中填充分层数据。 您可以使用引用来构建像数组结构的树,以避免递归。如果你有兴趣,我可以发表一个例子。 – nineinchnick
@nineinchnick是的请我想看看这个例子。 – ankitr