получение строк из таблицы с помощью Zend DB - PullRequest
0 голосов
/ 22 декабря 2010

У меня есть в основном следующая таблица:

Категории

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

В таблице хранятся категории и подкатегории, если значение category_id_categories равно нулю, это основные категории, иначе это подкатегориикатегория с этим идентификатором.Я хочу показать это на странице, поэтому я создал эти функции для моей модели категорий:

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;

Итак, categoryList - это массив со всеми категориямии ключ sub_categories - это другой массив со всеми подкатегориями.Это работает, но мне было интересно, есть ли способ сделать это, используя объекты вместо массива, и, возможно, используя только один запрос вместо 2?

Если я выберу все из таблицы, я получу категории иподкатегории, но тогда мне придется переместить некоторую логику в представление, чтобы выбрать подкатегории, которым я верю.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 26 декабря 2010

Просто поместите $ 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);
}
0 голосов
/ 20 июля 2015
$sql = "SELECT * FROM TABLE_NAME WHERE ID = 1";
$rows = $db->fetchAll($sql);

//One row return array
echo $rows[0]['field_name'];

http://framework.zend.com/manual/1.12/en/zend.db.table.row.html

http://framework.zend.com/manual/1.12/en/zend.db.table.rowset.html

...