2012-02-20 2 views
0

Спасибо заранее ... смотрите ниже кода .. У меня есть 2 модели, категория и продукткак получить данные из нескольких таблиц и отображения в поле зрения с помощью Zend Framework

моя модель продукта класса Admin_Model_Product расширяет 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() и нужно получить parentrow каждого продукта и его отображения в моем view ... я могу вытащить все продукты, но я не знаю, как найти родительскую категорию каждого продукта и связать их, есть ли какой-либо пример исходного кода? или любое предложение? Мне нужен массив, охватывающий все продукты и название родительской категории. Пожалуйста, будьте быстрыми.thanks

ответ

-1

попробовать следующее:

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

$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

Это худшее, что нужно сделать, теперь вы создаете n запросов, где n - количество продуктов, люди должны избегать этого решения, так как вы можете сделать это только для запросов. –

+0

** Неустранимая ошибка: вызов функции-члена findDependentRowset() для не-объекта в C: \ xampp \ htdocs \ wnw \ application \ modules \ admin \ controllers \ ProductsController.p ** – jugnu

+0

Я получаю эту ошибку – jugnu

0

Лучший способ добиться этого - это итерирование результата продукта и создание массива, охватывающего все категории_id, затем запрос модели категории с помощью where('category_id IN (?)', $array_of_categories_ids), а затем создание массив из категорий rowset с 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 

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

+0

спасибо за внимание. Я новичок в zend и работаю над своим первым проектом ... Я могу это сделать, используя ** Joins() **, но я не мог понять ваш подход ... не могли бы вы дать мне пример кода? спасибо заранее. – jugnu

+0

Смотрите мои правки :) Надеюсь, это поможет. –

+0

очень дорого ... ваше решение может показаться немного трудным, но его действительно goood ... thanks :-) – jugnu