как получить данные из нескольких таблиц и отобразить их с помощью Zend Framework - PullRequest
0 голосов
/ 21 февраля 2012

Заранее спасибо ... см. Ниже код .. У меня есть 2 модели, категории и продукт

моя модель продукта Класс Admin_Model_Product extends Zend_Db_Table_Abstract {

protected $_name = 'products';
protected $_referenceMap = array(
    'category' => array(
        'columns' => array('category_id'),
        'refTableClass' => 'Admin_Model_Category',
        'refColumns' => array('id'),
        'onDelete' => self::CASCADE,
        'onUpdate' => self::RESTRICT
    )
);

}

модель моей категории:

class Admin_Model_Category extends Zend_Db_Table_Abstract {

protected $_name = 'categories';
protected $_dependentTables = array('Admin_Model_Product');

} в моем контроллере продуктов у меня есть

class Admin_ProductsController extends Zend_Controller_Action {

public function init() {

}

public function indexAction() {
    echo '<pre>';
    $model = new Admin_Model_Product();

}

}

Что мне нужно сделать, так это получить все продукты, используя метод fetchAll (), и мне нужно получить скобки для каждого продукта и отобразить его в моем представлении ... я могу получить все продукты, но я не знаю, как найти каждый продукт родительская категория и их привязка, есть ли пример исходного кода? или любое предложение? мне нужен массив со всеми продуктами и именем родительской категории .. пожалуйста, будьте быстры. спасибо

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

попробуйте следующее:

Получить категории и их продукты:

$model_category = new Admin_Model_Category();
$categorySet = $model_category->fetchAll(); 
$categories = $categorySet->toArray();

$i = 0;
$results = array();
foreach($categories as $category)
   $categoryRow = $model_category->fetchRow('id =', $category->category_id)
   $products = $categoryRow->findDependentRowset('Admin_Model_Product');
   $results[$i]['parent'] = $category;
   $results[$i]['products'] = $products;
   $i++;
}

затем передайте его на просмотр:

$view->results = results;
0 голосов
/ 21 февраля 2012

Лучший способ сделать это - перебрать результат по продуктам и создать массив со всеми категориями_данных, затем запросить модель категорий с помощью where('category_id IN (?)', $array_of_categories_ids), а затем создать массив из набора строк категорий с id_category => row_pairs.Тогда Вы можете сделать это всего за два запроса:)

$categories_ids = array();
foreach ($products as $product)
{
     $categories_ids[ $product->category_id ] = $product->category_id; // set key to category id to avoid duplicated category' ids
}
$categories = $categoryModel->fetchAll($categoryModel->select()->where('id_category in (?)', $categories_ids)); // here u have to add check on array 'coz if empty it will thoro Query exception
// now just iterate over categories
$categories = array();
foreach ($categories as $category)
{
     $categories[ $category->id_category ] = $category;
}
// now when iterating over products u can just do $categories[ $product->category_id ] to get proper category for profuct

В любом случае, извините за возможные опечатки, написал это на лету;)

...