2010-12-22 52 views
0

我基本上有如下表,正从表与Zend分贝行

分类

id name  categories_id_categories 
1 Clothes  null 
2 Shirts  1 
3 Pants  1 
4 Electronics null 
5 Tv   4 

该表存储类别和子类别,如果categories_id_categories是空吗更有大类别的更有耐力子具有该ID的类别的类别。我想,所以我创建了我的分类模型,这个函数来显示这个页面上:

public function getAllCategories() 
{ 
    $select = $this->select() 
        ->where('categories_id_categories IS NULL'); 

    return $this->fetchAll($select); 
} 

public function getAllSubCategories() 
{ 
    $select = $this->select() 
        ->where('categories_id_categories IS NOT NULL'); 

    return $this->fetchAll($select); 
} 

而且我控制器上:

$categories = new Model_DbTable_Categories(); 

    $categoryList = $categories->getAllCategories(); 

    $categoriesAll = array(); 

    foreach ($categoryList->toArray() as $category) { 
     $subCategories = $categories->getSubCategoriesByCategory($category['id']); 
     $category['sub_categories'] = $subCategories->toArray(); 
     $categoriesAll[] = $category; 
    } 

    $this->view->categoryList = $categoriesAll; 

因此所属分类与所有类别和关键 - 行业标准的数组是另一个包含所有子类别的数组。这工作,但我想知道是否有办法使用对象而不是数组来做到这一点,也许只使用一个查询而不是2?

如果我从表中选择所有我会得到的类别和子类别,但然后我必须移动一些逻辑到视图中选择我认为的子类别。

在此先感谢!

回答

2

只要把$ id来getAllSubcategories创造getSubCategories在你的模型是这样的:

 
public function geSubCategories($id = null) 
{ 
    $select = $this->select(); 
    if ($id == null) { 
     $select->where('categories_id_categories IS NOT NULL'); 
    } 
    else { 
     $select->where('id = ?', $id); 
    } 

    return $this->fetchAll($select); 
}