在类别模型中,getAll方法用于返回所有类别数据。下面方法 $roots 中的第一个活动记录具有所有根类别,$categories 具有根类别的后代类别。如何添加这两个类别。以下是 getAll 方法:
public function getAll()
{
$roots = Category::model()->roots()->findAll();
foreach($roots as $root)
{
$category = Category::model()->findByPk($root->root);
$categories = $category->descendants()->findAll();
}
return $category + $categories; // this does not concatenate, causes error
}
这里有两个问题:
您只会获得表中最后一个根的
category
和descendants
,因为foreach
循环每次都会覆盖变量。为了防止这种情况,您需要创建 $categoriy
和 $categories
数组,并像 $category[] = ...
和 $categories[] = ...
一样进行分配。或者也许更好的是,您可以在循环结束时将它们合并到复合数组中。也许是这样的:
foreach($roots as $root)
{
$category = Category::model()->findByPk($root->root);
$categories[] = $category;
$categories = array_merge($categories, $category->descendants()->findAll());
}
return $categories;
您现在拥有一个包含所有根类别和后代类别的数组,存储为根类别,然后是其后代,然后是下一个根类别,然后是其后代,依此类推。
$category
是一个 Category
对象,而 $categories
是 descendants()
的数组。我希望这些也是Category
对象。但是你不能将对象与数组连接起来,你必须使用 array_merge(),请参阅上面的示例。