0

在类别模型中,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   
    }
4

1 回答 1

2

这里有两个问题:

  1. 您只会获得表中最后一个根的categoryand ,因为循环每次都会覆盖变量。为防止这种情况,您将需要制作和数组,并分配 like和。或者也许更好的是,您可以在循环结束时将它们合并到一个复合数组中。也许是这样的:descendantsforeach$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;
    

    您现在有一个包含所有根类别和后代类别的数组,存储为根类别,然后是其后代,然后是下一个根类别,然后是其后代,等等。

  2. $category是一个Category写入的对象,并且$categories是一个数组descendants()。我希望这些也是Category对象。但是您不能将对象与数组连接,您必须使用 array_merge(),请参见上面的示例。

于 2013-08-01T16:13:49.910 回答