在Category Model中,getAll方法用于返回所有类别数据。以下方法中的第一个活动记录$ roots具有所有根类别,而$ category具有根类别的后代类别。如何添加这两个类别。以下是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
}
答案 0 :(得分:2)
这里有两个问题:
您只会获得表中最后一个根的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(),参见上面的例子。