添加两个模型类

问题描述 投票:0回答:1

在类别模型中,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   
    }
php yii
1个回答
2
投票

这里有两个问题:

  1. 您只会获得表中最后一个根的

    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;
    

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

  2. $category
    是一个
    Category
    对象,而
    $categories
    descendants()
    的数组。我希望这些也是
    Category
    对象。但是你不能将对象与数组连接起来,你必须使用 array_merge(),请参阅上面的示例。

© www.soinside.com 2019 - 2024. All rights reserved.